HDU 2894 DeBruijin (欧拉回路)

题目地址:HDU2894

跟POJ 1392基本一样的。。

代码如下:

#include <iostream>
#include <string.h>
#include <math.h>
#include <queue>
#include <algorithm>
#include <stdlib.h>
#include <map>
#include <set>
#include <stdio.h>
using namespace std;
#define LL long long
#define pi acos(-1.0)
const int mod=1e9+7;
const int INF=0x3f3f3f3f;
const double eqs=1e-9;
int path[12][1<<12], top[12], vis[1<<12], head[1<<12], cnt;
struct node
{
        int u, v, next;
}edge[1<<13];
void add(int u, int v)
{
        edge[cnt].v=v;
        edge[cnt].next=head[u];
        head[u]=cnt++;
}
void dfs(int u, int f)
{
        for(int i=head[u];i!=-1;i=edge[i].next){
                int v=edge[i].v;
                if(!vis[v]){
                        vis[v]=1;
                        dfs(v,f);
                }
        }
        path[f][top[f]++]=u;
}
void init()
{
        memset(head,-1,sizeof(head));
        cnt=0;
        memset(vis,0,sizeof(vis));
}
int main()
{
        int i, j, n, k, h, x, y;
        //freopen("2.txt","w",stdout);
        memset(top,0,sizeof(top));
        for(i=1;i<=11;i++){
                init();
                x=1<<i;
                y=1<<i-1;
                for(j=0;j<x;j++){
                        if(j<y){
                                add(j,j<<1|1);
                                add(j,j<<1);
                        }
                        else{
                                add(j,(j-y)<<1|1);
                                add(j,(j-y)<<1);
                        }
                }
                vis[0]=1;
                dfs(0,i);
        }
        while(scanf("%d",&n)!=EOF){
                printf("%d ",1<<n);
                for(i=1;i<n;i++){
                        printf("0");
                }
                for(i=top[n]-1;i>=n-1;i--){
                        printf("%d",path[n][i]&1);
                }
                puts("");
        }
        return 0;
}
时间: 2024-12-28 21:25:35

HDU 2894 DeBruijin (欧拉回路)的相关文章

HDU 2894 DeBruijin 兹鼓欧拉回路

题目来源:HDU 2894 DeBruijin 题意: 思路: #include <cstdio> #include <cstring> using namespace std; int vis[5000], ans[5000]; int len, n; void dfs(int u) { int v = ((u<<1)&((1<<n)-1)); if(!vis[v]) { vis[v] = 1; dfs(v); ans[len++] = 0; }

HDU 2894 DeBruijin (数位欧拉)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2894 题目大意:旋转鼓的表面分成m块扇形,如图所示(m=8).图中阴影区表示用导电材料制成,空白区用绝缘材料制成,终端a.b和c是3(k=3)处接地或不是接地分别用二进制信号0或1表示.因此,鼓的位置可用二进制信号表示.试问应如何选取这8个扇形的材料使每转过一个扇形都得到一个不同的二进制信号,即每转一周,能得到000到111的8个数. 那我们现在把旋转鼓的表面分成m块扇形,每一份记为0或1,使得任何

HDU 2894 欧拉回路

#include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define N 20020 struct node{ int from, to, dou, nex; }edge[N]; int head[N], edgenum; void add(int u, int v,int dou)

HDU ACM 1878欧拉回路

欧拉回路的判断: 1.若有一个节点的度为奇数,则不能构成欧拉回路: 2.判断所有点是否可以一笔通过并回到起点. #include<iostream> using namespace std; #define N 1005 int deg[N]; //每个节点的度 bool vis[N]; int map[N][N]; bool DegValid(int n) { for(int i=1;i<=n;i++) if(deg[i]&1) return false; return tru

欧拉路&amp;&amp;欧拉回路 概念及其练习

欧拉路: 如果给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,这条路称为欧拉路: 如果给定无孤立结点图G,若存在一条回路,经过图中每边一次且仅一次,那么该回路称为欧拉回路. 存在欧拉回路的图,称为欧拉图. 一. 对于无向图G,具有一条欧拉路,当且仅当G是连通的,且有零个或两个奇数度结点. 且有零个奇数度结点,存在欧拉回路:有两个奇数度结点,存在欧拉路. 判断无向图G是否连通,可以从任意结点出发,进行深度优先遍历,如果可以遍历到所有点,也可以用并查集,判断根节点的个数, 说明,图G连通

图论--欧拉路,欧拉回路(小结)

在题目中在慢慢细说概念 1.HDU - 3018 Ant Trip 题目大意:又N个村庄,M条道路,问需要走几次才能将所有的路遍历 解题思路:这题问的是有关欧拉路的判定 欧拉路就是每条边只能走一次,且要遍历所有的边,简单的说就是一笔画(图连通) 这道题是无向图的欧拉路,无向图的欧拉路的判定:所有点的度数都是偶数度,或者只有两个点的度是奇数度,且图要是连通图 知道欧拉路是什么后,这题就比较好做了,第一件事就是找到有几个连通块,然后再判断一下每个连通块需要几笔才能完成就好了 #include <cs

图论 500题——主要为hdu/poj/zoj

转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并查集======================================[HDU]1213   How Many Tables   基础并查集★1272   小希的迷宫   基础并查集★1325&&poj1308  Is It A Tree?   基础并查集★1856   More i

hdu图论题目分类

=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 基础并查集★ 1325&&poj1308 Is It A Tree? 基础并查集★ 1856 More is better 基础并查集★ 1102 Constructing Roads 基础最小生成树★ 1232 畅通工程 基础并查集★ 123

题单二:图论500

http://wenku.baidu.com/link?url=gETLFsWcgddEDRZ334EJOS7qCTab94qw5cor8Es0LINVaGMSgc9nIV-utRIDh--2UwRLvsvJ5tXFjbdpzbjygEdpGehim1i5BfzYgYWxJmu ==========  以下是最小生成树+并查集=========================[HDU]1213         How Many Tables        基础并查集★1272         小