循环日程表问题

算法竞赛入门经典 p149


#include <iostream> #include <cmath> using namespace std; int a,b,mmap[100][100]; void solve(int k) { if(k==1) { mmap[0][0]=mmap[1][1]=1; mmap[0][1]=mmap[1][0]=2; return ; } solve(k-1); int a=pow(2,k-1),b=pow(2,k); for(int k=0;k<a;k++) { for(int i=a;i<b;i++) { mmap[k+a][i-a]=mmap[k][i]=mmap[k][i-a]+a; mmap[k+a][i]=mmap[k][i-a]; } } } int main() { int n; cin>>n; double k=log(n)/log(2); a=pow(2,k-1),b=pow(2,k); solve(k); for(int i=0;i<b;i++) { for(int j=0;j<b;j++) { cout<<mmap[i][j]<<" "; } cout<<endl; } return 0; }

 

posted @ 2018-09-24 11:30  LandingGuys  阅读(203)  评论(0编辑  收藏  举报