题目:
有n=2^k个远动员选手,设计比赛日程表实现:
(1)每个选手必须与n-1个选手比赛
(2)每个选手一天只比赛一场
(3)比赛共进行n-1天
题意:略。
思路:
把n个选手分成两组,每组内进行比赛安排,每组内的安排又要继续分成两组,直到组内仅有两人,那么就是安排这两个人进行比赛,这也就是最小子问题。用递归直到最底层设初值,逐层赋值,二维数组打出表来。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=2000;
int a[maxn][maxn],n;
void Table(int m)
{
if(m>1)
{
Table(m/2);
for(int i=1; i<=m; i++)
for(int j=1; j<=m; j++)
{
a[m+i][j]=a[i][j]+m;
a[i][m+j]=a[i][j]+m;
a[m+i][m+j]=a[i][j];
}
}
else
{
a[1][1]=1;
a[1][2]=2;
a[2][1]=2;
a[2][2]=1;
}
}
int main()
{
int k;
while(~scanf("%d",&k))
{
n=1;
for(int i=1; i<=k; i++)
n=n<<1;
Table(n);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++