nhjcacmt / acm

NHJC-ACM队信息站
6 stars 1 forks source link

格雷码 #15

Open windglaze opened 6 years ago

windglaze commented 6 years ago

递归输出即可,附上代码

#include <stdio.h>
#include <stdlib.h>

int n;
char s[17];

void dfs(int i)
{
    if(i==n) printf("%s\n",s); //到达底部就输出
    else
    {
        dfs(i+1); //深度优先搜索
        if(s[i]=='0') 
            s[i]='1';
        else 
            s[i]='0'; //把当前位逆转
        dfs(i+1); //继续向下搜索
    }
}
int main()
{
    int i;
    while(1)
    {
        scanf("%d",&n);
        if(!n) 
            break;
        for(i=0;i<17;i++) 
        {
            s[i]='0';
        }
        s[n]='\0';
        dfs(0);
        printf("\n");
    }
    system("pause");
    return 0;
}