#include<stdio.h>
#include<math.h>
#include<string>
#define MAX 1024
int a[MAX][MAX];
void schedule(int a[][1024],int k);
void main()
{
int k;
scanf("%d",&k);
memset(a,0,sizeof(a[0][0]));
schedule(a,k);
for(int i=0;i<(int)pow(2,k);i++)
{
for(int j=0;j<pow(2,k);j++)
printf("%-3d ",a[i][j]);
printf("\n");
}
}
void schedule(int a[][MAX],int k)
{
if(k==1)
{
a[0][0]=1;
a[0][1]=2;
a[1][0]=2;
a[1][1]=1;
}
if(k>1)
{
schedule(a,k-1);
int increment=pow(2,k-1);
for(int i=0;i<pow(2,k-1);i++)
for(int j=0;j<pow(2,k-1);j++)
{
a[i+increment][j+increment]=a[i][j];
a[i][j+increment]=a[i][j]+increment;
a[i+increment][j]=a[i][j]+increment;
}
}
}
解决日程安排问题:要求一场比赛中,每个选手都要和其他选手进行一场比赛,要求每天只能进行一场比赛
下面程序的输出结果是,第i行j列表示第i个选手第j天遇到的对手。