循环赛日程问题,树上在讲分治法,但是算法的实现确是用循环来实现的,我们用递归来实现这一个算法,比较简单,但是希望大家看完给一点意见。
#include<iostream>
using namespace std;#include<stdio.h>
void Copy(int **a,int n,int x1,int y1,int x2,int y2)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
a[x2+i][y2+j]=a[x1+i][y1+j];
}
}
}
void fun(int **a,int n,int x,int y)
{
if(n==1)
{
return ;
}
else
{
fun(a,n/2,x,y);
fun(a,n/2,x,y+n/2);
Copy(a,n/2,x,y,x+n/2,y+n/2);
Copy(a,n/2,x,y+n/2,x+n/2,y);
}
}
int main()
{
int n=1,k;
scanf("%d",&k);
for(int i=0;i<k;i++)
{
n*=2;
}
int **p=new int*[n];
for(int i=0;i<n;i++)
{
p[i]=new int[10];
}
for(int i=0;i<n;i++)
p[0][i]=i+1;
fun(p,n,0,0);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
printf("%d\t",p[i][j]);
if(j==n-1)
printf("\n");
}
return 0;
}