#include<iostream>//格雷码
#include<cmath>
#include<cstring>
using namespace std;
#pragma warning(disable:4996)
void buildgray(char **gray,int n)
{
for(int k=0;k<=n-1;k++)
{
for(int i=1;i<=pow(2,k);i++)
strcpy(gray[(int)pow(2,k)+i-1],gray[(int)pow(2,k)-i]);
for(int i=1;i<=pow(2,k);i++)
gray[i-1][k]='0';
for(int i=1;i<=pow(2,k);i++)
gray[i-1+(int)pow(2,k)][k]='1';
}
for(int i=0;i<pow(2,n);i++)
gray[i][n]='\0';
return;
}
int main()
{
int n;
cin>>n;
char **gray=new char*[(int)pow(2,n)];
for(int i=0;i<pow(2,n);i++)
gray[i]=new char[n+1];
buildgray(gray,n);
for(int i=0;i<pow(2,n);i++)
cout<<gray[i]<<endl;
for(int i=0;i<pow(2,n);i++)
delete gray[i];
delete gray;
system("pause");
return 0;
}
用分治法实现。
key word: entry.