循环赛日程表(分治)

来源:互联网 发布:minila air mac 编辑:程序博客网 时间:2024/04/29 14:03
//循环赛日程表//思路:分治策略。使用递归函数分割,直到剩下两个人。//姓名:刘哲;学号:2015214189#include <bits/stdc++.h>//头文件void table(int n);//函数声明void print(int n);//输出函数const int maxn=1e4;//假设最大人数int s[maxn][maxn];//表int n;int main(){    while(cin>>n)    {        memset(s,0,sizeof(s));//初始化        table(n);//调用函数        print(n);//输出函数    }    return 0;}void table(int n){    if(n==2)    {        s[1][1]=s[2][2]=1;        s[1][2]=s[2][1]=2;        return ;    }    if(n>2) table(n/2);    int k=n/2;    for(int i=1;i<=k;i++)        for(int j=1;j<=k;j++)        {            s[i+k][j+k]=s[i][j];            s[i+k][j]=s[i][j]+k;            s[i][j+k]=s[i][j]+k;        }}void print(int n){    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)            printf("%4d",s[i][j]);//cout<<s[i][j]<<"    ";        cout<<endl;    }}

原创粉丝点击