#include <stdio.h>
#include <math.h>
int nums[100][100];
void change(int start,int end,int num);
int max=2;
int main()
{
//int nums[1000][1000];
int num;
scanf("%d",&num);
int round=num;
num=pow(2,num);
int i,j;
for(i=1;i<=num;i++){
for(j=1;j<=1;j++){
if(i%2!=0){
nums[i][1]=i;
nums[i][2]=i+1;
}else {
nums[i][1]=i;
nums[i][2]=i-1;
}
}
}//第一次划分
int k=1;
int start=1;
int end=2;
while(k<round){
change(start,end,num);
end*=2;
k++;
}
for(i=1;i<=num;i++){
for(j=1;j<=num;j++){
printf("%d ",nums[i][j]);
}
if(i!=num)
printf("\n");
}
}
void change(int start,int end,int num){
int i,j,lun;
lun=max;
for(i=start;i<=num;i++){
for(j=start;j<=end;j++){
if(lun>0)
nums[i+end][j+end]=nums[i][j];
else{
nums[i-end][j+end]=nums[i][j];
}
}
lun--;
if(lun==-max){
lun=max;
}
}
max*=2;
}
分治法实现循环日程安排问题(c语言实现)
最新推荐文章于 2024-09-14 20:30:05 发布