• 太鼓达人


    这个题以前一直没弄明白...

    相当于有$2^n-1$个点,$2^n$条边

    然后求欧拉回路

    可以dfs也可以迭代

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define mem(a,b) memset(a,b,sizeof(a))
    using namespace std;
    
    int k,maxp;
    int flag[5006];
    int a[5006],num;
    
    void print()
    {
        for(int i=num-k+2;i<=num;++i)
          printf("%d",a[i]);
        for(int i=1;i<=num-k+1;++i)
          printf("%d",a[i]);
        exit(0);
    }
    
    void dfs(int now,int len)
    {
        if(len==maxp+1)
        {
            print();
            return ;
        }
        if(flag[now])
          return ;
        
        flag[now]=1;
        a[++num]=now&1;
        
        //printf("now=%d len=%d
    ",now,len);
        int temp=((now&(~(1<<(k-1))))<<1);
        dfs(temp,len+1);
        
        dfs(temp|1,len+1);
        
        flag[now]=0;
        --num;
        
    }
    
    int main(){
        
        //freopen("2.txt","w",stdout);
        
        scanf("%d",&k);
        maxp=(1<<k);
        printf("%d ",maxp);
        
        dfs(0,1);
        //while(1);
        return 0;
    }
    dfs
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <cstdlib>
    #include <algorithm>
    #define ll long long
    #define rint register int
    #define mem(a,b) memset(a,b,sizeof(a))
    using namespace std;
    inline void read(int &x)
    {
        x=0; char q=getchar();
        while(q<'0'||q>'9') q=getchar();
        while(q>='0'&&q<='9') x=x*10+q-'0',q=getchar();
    }
    
    int n,len,maxp;
    bool vis[(1<<20)+1000];
    
    int main(){
        
        rint i,j;
        
        read(n);
        len=(1<<n);
        maxp=(1<<n)-1;
        //printf("%d ",len);
        int now=maxp;
        vis[maxp]=1;
        for(i=n+1;i<=len;++i)
        {
            now=((now<<1)&maxp);
            if(!vis[now])
            {
                vis[now]=1;
                printf("0");
            }
            else
            {
                ++now; vis[now]=1;
                printf("1");
            }
        }
        for(i=1;i<=n;++i) printf("1");
    }
    迭代
  • 相关阅读:
    第二十九天- socketserver模块 ftp上传
    第二十八天- tcp下的粘包和解决方案
    记录每次更新到仓库
    Python在自动化运维时经常会用到的方法
    运维新手们,别再问需不需要学PYTHON了!!!
    nagios监控系统搭建!!
    Nagios:企业级系统监控方案
    打造自己的Cacti模板
    Cacti插件
    Cacti脚本及模板
  • 原文地址:https://www.cnblogs.com/A-LEAF/p/7728063.html
Copyright © 2020-2023  润新知