2006年12月23日土曜日

格雷码算法C源码

格雷码是一个长度为2^n的序列,序列中无相同元素,且每个元素都是长度为n的二进制位串,相邻元素恰好只有1位不同。例如长度为2^3的格雷码为 (000,001,011,010,110,111,101,100)。设计分治算法对任意的n值构造相应的格雷码。#include "stdio.h"
void putsgray(int a[],int m)
{
int i;
for(i=m;i>0;i--) printf("%d",a[i]);
printf("\n");
}
void gray(int n,int a[],int m)
{
if(n==1)
{
a[n]=1-a[n];
putsgray(a,m);
}
else
{
gray(n-1,a,m);
a[n]=1-a[n];
putsgray(a,m);
gray(n-1,a,m);
}
}
main()
{
int a[5]={0};
putsgray(a,4);
gray(4,a,4);
}

0 件のコメント: