欧拉回路(其实我感觉和欧拉回路没有啥关系,二进制的学习)

题目链接:点击打开链接

代码:

#include <stdio.h>
#define NMAX 40000
int g[NMAX][2]={{-1}};
int path[NMAX]={0};
int pathsize=0;
int n=0;
void DFS(int u)
{
    int v,i;
    for(i=0;i<2;i++)
    {
        v=g[u][i];
        if(v>-1)
        {
            g[u][i]=-1; 
            DFS(v);
        }
    }
    path[++pathsize]=u;
}
int main()
{
    int N;
    scanf("%d",&N);
    if (N==1)
    {
        printf("01\n");
        return 0;
    }
    n = 1<<(N-1);
    int i,j;
    for(i=0;i<n;i++)
    {
        j=(i<<1)&(n-1);
        g[i][0]=j;
        g[i][1]=j+1;
    }
    DFS(0);
    while(--pathsize)
    {
        printf("%d",path[pathsize]&1);
    }
    printf("\n");
    return 0;
}
看起来完全和欧拉回路没有什么关系,但是是用了欧拉回路的思想,这个题目提前告诉你肯定存在欧拉回路,所以你直接找这条路就好了,另外感觉这道题像是一个模式题,还是自己的二进制学的不好啊,也算学习一下二进制了,,,,,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值