zoukankan      html  css  js  c++  java
  • poj1041欧拉回路

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <string>
    #include <iostream>
    using namespace std;
    const int maxn=2000;
    int len;
    int head[maxn];
    struct Node
    {
        int a;int b;int c;
    }node[maxn];
    struct edge
    {
        int to;int val;int next;int op;int vis;
    }e[maxn*maxn];
    
    int add(int from,int to,int val)
    {
        e[len].to=to;
        e[len].val=val;
        e[len].next=head[from];
        head[from]=len++;
        return len-1;
    }
    int n=0;
    int sum;
    
    int cmp(const Node &a,const Node &b)
    {
        return a.c<b.c;
    }
    void dfs(int u)
    {
        for(int i=head[u];i!=-1;i=e[i].next){
            if(!e[i].vis){
                e[i].vis=1;e[e[i].op].vis=1;
                int cc=e[i].to;
                dfs(cc);
                cout<<e[i].val<<" ";
            }
        }
    }
    int main()
    {
        int a;int b;int c;
        int degree[maxn];
        while(scanf("%d%d",&a,&b),a||b){
            memset(degree,0,sizeof(degree));
            len=0;
            memset(head,-1,sizeof(head));
            sum=0;
            scanf("%d",&c); node[sum].a=a;node[sum].b=b;node[sum].c=c;
            sum++;if(a>n) n=a;if(b>n) b=n;
            while(scanf("%d%d",&a,&b),a||b){
                scanf("%d",&c);node[sum].a=a;node[sum].b=b;node[sum].c=c;
                sum++;if(a>n) n=a;if(b>n) n=b;
            }
            sort(node,node+sum,cmp);
            for(int i=0;i<sum;i++){
                int a=node[i].a;int b=node[i].b;int c=node[i].c;
                int cc=add(a,b,c);int cc1=add(b,a,c);
                degree[a]++;degree[b]++;
                e[cc].op=cc1;e[cc1].op=cc;
                e[cc].vis=e[cc1].vis=0;
            }
            int flag=0;
            for(int i=0;i<sum;i++){
                int a=node[i].a;int b=node[i].b;
                if((degree[a]&1)||(degree[b]&1)) {
                    flag=1;break;
                }
            }
            if(!flag){
                dfs(1);
            }
            else
                cout<<"Round trip does not exist.";
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    windows中80端口被System占用,PID=4的问题
    SpringBoot中动态加载(热部署)
    eclipse中Cannot change version of project facet Dynamic Web Module to 3.0的问题解决
    Eclipse启动tomcat后404错误
    Eclipse在当前行之上插入一行
    Java中==规则
    简明log4j配置教程
    CentOS7 配置静态IP
    CentOS7 mini安装后没有ifconfig命令的解决办法
    shell编程学习笔记之sed编辑器
  • 原文地址:https://www.cnblogs.com/yigexigua/p/3856464.html
Copyright © 2011-2022 走看看