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

    题目链接

    求给出的图是否存在欧拉回路并输出路径, 从1这个点开始, 输出时按边的升序输出。

    将每个点的边排序一下就可以。

     1 #include <iostream>
     2 #include <vector>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <algorithm>
     6 #include <cmath>
     7 #include <map>
     8 #include <set>
     9 #include <string>
    10 #include <queue>
    11 using namespace std;
    12 #define pb(x) push_back(x)
    13 #define ll long long
    14 #define mk(x, y) make_pair(x, y)
    15 #define lson l, m, rt<<1
    16 #define mem(a) memset(a, 0, sizeof(a))
    17 #define rson m+1, r, rt<<1|1
    18 #define mem1(a) memset(a, -1, sizeof(a))
    19 #define mem2(a) memset(a, 0x3f, sizeof(a))
    20 #define rep(i, n, a) for(int i = a; i<n; i++)
    21 #define fi first
    22 #define se second
    23 typedef pair<int, int> pll;
    24 const double PI = acos(-1.0);
    25 const double eps = 1e-8;
    26 const int mod = 1e9+7;
    27 const int inf = 1061109567;
    28 const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
    29 vector <pll> v[2000];
    30 int de[2000], cnt, ans[2000], vis[2000];
    31 void add(int a, int b, int c) {
    32     v[a].pb(mk(c, b));
    33     de[a]++;
    34 }
    35 void dfs(int u) {
    36     int len = v[u].size();
    37     for(int i = 0; i<len; i++) {
    38         int to = v[u][i].second;
    39         int e = v[u][i].fi;
    40         if(vis[e])
    41             continue;
    42         vis[e] = 1;
    43         dfs(to);
    44         ans[cnt++] = e;
    45     }
    46 }
    47 int main()
    48 {
    49     int a, b, c;
    50     while(1) {
    51         scanf("%d%d", &a, &b);
    52         if(a+b==0)
    53             break;
    54         scanf("%d", &c);
    55         for(int i = 1; i<1996; i++)
    56             v[i].clear();
    57         mem(de);
    58         mem(vis);
    59         cnt = 0;
    60         add(a, b, c);
    61         add(b, a, c);
    62         while(1) {
    63             scanf("%d%d", &a, &b);
    64             if(a+b==0)
    65                 break;
    66             scanf("%d", &c);
    67             add(a, b, c);
    68             add(b, a, c);
    69         }
    70         int flag = 0;
    71         for(int i = 1; i<=1995; i++) {
    72             if(de[i]%2==1) {
    73                 flag = 1;
    74                 break;
    75             }
    76             sort(v[i].begin(), v[i].end());
    77         }
    78         if(flag) {
    79             puts("Round trip does not exist.");
    80             continue;
    81         }
    82         dfs(1);
    83         for(int i = cnt-1; i>0; i--)
    84             cout<<ans[i]<<" ";
    85         cout<<ans[0]<<endl;
    86     }
    87     return 0;
    88 }
  • 相关阅读:
    Ubuntu16.04安装openldap和phpldapadmin
    Java 8 中的抽象类和接口到底有啥区别?
    Redis 开发陷阱及避坑指南!
    Java 中的 6 颗语法糖
    Java 8 有多牛逼?打破一切你对接口的认知!
    Git操作常用的命令都在这里了。
    Github 太狠了,居然把 "master" 干掉了!
    微服务业务日志收集方案,写得非常好!
    Maven基本介绍与安装
    IntelliJ IDEA 调试 Java 8 Stream,实在太香了!
  • 原文地址:https://www.cnblogs.com/yohaha/p/5077848.html
Copyright © 2011-2022 走看看