zoukankan      html  css  js  c++  java
  • poj 1041 John's trip(欧拉回路)

    题意:给出一幅无向图,用每条边的编号及其两个端点编号描述,求无向图的欧拉回路,按字典序最小的边的编号输出;

    思路:若存在度数为奇数的点,则欧拉回路不存在;dfs求欧拉回路;

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 2000
    #define maxm 50
    using namespace std;
    struct node{
        int s,t;
    }r[maxn];
    bool vis[maxn];
    int deg[maxm],s[maxn];//节点的度deg[],边序列s[]
    int n,S,stop;      //边数n,节点的最小编号S,欧拉回路的边数stop
    bool exist()     //若存在度数为奇数的节点,则返回0,不存在欧拉回路;
    {
        for(int i=1;i<maxm;i++)
            if(deg[i]%2==1) return 0;
        return 1;
    }
    void dfs(int now)
    {
        for(int i=1;i<=n;i++)
        if(!vis[i]&&(r[i].s==now||r[i].t==now)){//递归搜索与now相连的未访问的边
            vis[i]=1;
            dfs(r[i].s+r[i].t-now); //该边的另一端点
            s[++stop]=i;
        }
    }
    int main()
    {
        int x,y,num;
        while(scanf("%d%d",&x,&y)){
            if(x<=0||y<=0) break;
            S=min(x,y);n=0;
            memset(deg,0,sizeof(deg));
            scanf("%d",&num);
            r[num].s=x;r[num].t=y;
            deg[x]++;deg[y]++;
            n=max(n,num);
            while(scanf("%d%d",&x,&y)){
                if(x<=0) break;
                S=min(x,y);
                scanf("%d",&num);
                r[num].s=x;r[num].t=y;
                deg[x]++;deg[y]++;
                n=max(n,num);
            }
            if(exist()){ //确保无度数为奇数的点
                stop=0;
                memset(vis,0,sizeof(vis));
                dfs(S);   //从最小节点出发,递归计算欧拉回路
                for(int i=stop;i>=2;i--) printf("%d ",s[i]);
                printf("%d
    ",s[1]);
             }
             else
                printf("Round trip does not exist.
    ");
        }
        return 0;
    }
  • 相关阅读:
    mongodb复制集配置
    replication set复制集
    CentOS 6.5下源码安装MySQL 5.6
    10个最常见的 HTML5 面试题及答案
    Javascript中document.execCommand()的用法
    javascript 准确的判断类型方法
    getUserMedia API
    javascript
    C++ 面试题
    C++
  • 原文地址:https://www.cnblogs.com/dashuzhilin/p/4541806.html
Copyright © 2011-2022 走看看