格雷码。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int grayCode[10000000];
int main()
{
int s,n,m,pn,pm,t,i,j;
scanf("%d%d",&n,&m);
s=pow(2,(n+m));
pn=pow(2,n);
pm=pow(2,m);
for (i=0; i<s; i++)
{
grayCode[i]=i^(i>>1);
//printf("%d\n",grayCode[i]);
}
t=0;
for (i=0; i<pn; i+=2)
{
for (j=0; j<pm; j++)
{
printf("%d",grayCode[t+j]);
// printf("%d\n",t+j);
if (j != pm-1)
printf(" ");
else
printf("\n");
}
t+=pm;
for (j=pm-1; j>=0; j--)
{
printf("%d",grayCode[t+j]);
// printf("%d\n",t+j);
if (j == 0)
printf("\n");
else
printf(" ");
}
t+=pm;
}
}
本文介绍了一种生成并打印灰码的算法,通过利用位运算优化效率。
5446

被折叠的 条评论
为什么被折叠?



