太无语了。

这道题做了一整天。

主要还是我太弱了。

以后这个就当输出欧拉路径的模版吧。

题目中的输出字典序最小我有点搞不清楚,看了别人是这么写的。但是我发现我过不了后面DISCUSS里面的数据。

题意理解问题还是题目问题?

这道题大致以下分几步吧。

判断图是否连通,用并查集判断即可。

判断图是否有欧拉回路或者通路,判断出度和入度即可,若是欧拉通路,找出起点。

DFS找出欧拉路径输出。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <stack>
#include <map>
#include <iomanip>
#define PI acos(-1.0)
#define Max 2505
#define inf 1<<28
#define LL(x) ( x << 1 )
#define RR(x) ( x << 1 | 1 )
#define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i )
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define mp(a,b) make_pair(a,b)
#define PII pair<int,int>
#define N 10005
using namespace std;inline void RD(int &ret) {char c;do {c = getchar();} while(c < '0' || c > '9') ;ret = c - '0';while((c=getchar()) >= '0' && c <= '9')ret = ret * 10 + ( c - '0' );
}
inline void OT(int a) {if(a >= 10)OT(a / 10) ;putchar(a % 10 + '0') ;
}char a[N] ;
vector<string>g[300] ;
int in[N] ,out[N] ;
int vis[N] ;
int f[N] ;
int n ;
int first ;int find(int x) {return f[x] == x ? x : f[x] = find(f[x]) ;
}void Union(int a ,int b) {a = find(a) ;b = find(b) ;if(a == b)return ;if(a > b)f[a] = b ;else f[b] = a ;
}void init() {mem(in , 0) ;mem(out ,0) ;for (int i = 0 ; i < 260 ; i ++ )f[i] = i ;for (int i = 0 ; i < 260 ; i ++ )g[i].clear() ;first = 0 ;mem(vis, 0) ;
}stack<string>ans ;
void dfs(int now ){int sz = g[now].size() ;while(g[now].size() > 0){string nn = g[now][0] ;int tt = g[now][0][g[now][0].size() - 1] - 'a' ;g[now].erase(g[now].begin()) ;dfs(tt) ;ans.push(nn) ;}
}
int main() {int T ;
#ifndef ONLINE_JUDGEfreopen("D:\\acm.txt","r",stdin) ;
#endifcin >> T ;while(T -- ) {cin >> n ;init() ;for (int i = 1 ; i <= n ; i ++ ) {scanf("%s",a) ;int s = a[0] - 'a' ;int e = a[strlen(a) - 1] - 'a' ;out[s] ++ ;in[e] ++ ;g[s].push_back(a) ;Union(s , e) ;vis[s] = vis[e] = 1 ;}int fnum = 0 ;int dnum = 0 ;bool flag = 0 ;int st = -1 ;for (int i = 0 ; i < 26 ; i ++ ) {if(!vis[i])continue ;if(i == find(i))fnum ++ ;if(in[i] - out[i] == 1){dnum ++ ;}if(out[i] - in[i] == 1){dnum ++ ;st = i ;}if(abs(out[i] - in[i]) >= 2){flag = 1 ;}}if((dnum == 1 || dnum > 2) ||(flag) || (fnum != 1)) {puts("***") ;continue ;}else{for (int i = 0 ;i < 26; i ++ ){if(st == -1 && vis[i])st = i ;//如果是欧拉回路,则找到字典序最小的起点。sort(g[i].begin() , g[i].end()) ;}while(!ans.empty())ans.pop() ;dfs(st) ;printf("%s",ans.top().c_str()) ;ans.pop() ;while(!ans.empty()){printf(".%s",ans.top().c_str()) ;ans.pop() ;}puts("") ;}}return 0 ;
}

转载于:https://www.cnblogs.com/jiangu66/p/3225971.html

POJ 2337 输出欧拉路径相关推荐

  1. poj 2337 Catenyms 【欧拉路径】

    题目链接:http://poj.org/problem?id=2337 题意:给定一些单词,假设一个单词的尾字母与还有一个的首字母同样则能够连接.问能否够每一个单词用一次,将全部单词连接,能够则输出字 ...

  2. 【POJ - 2337】Catenyms(欧拉图相关,欧拉通路输出路径,tricks)

    题干: A catenym is a pair of words separated by a period such that the last letter of the first word i ...

  3. POJ - 2337 Catenyms 欧拉回路

    测试数据在这 http://acm.student.cs.uwaterloo.ca/~acm00/030125/data/ 首先在说这道题跟之前做的poj1386很像 但是多的就是要输入路径,并且是最 ...

  4. POJ 2337 欧拉回路

    题意: 如果给出的单词能够首尾相接,请按字典序输出单词,中间要加'.' 否则输出三个"*". 思路: 欧拉回路 记得按字典序排序哦~ 加边的时候要倒着加.(邻接表遍历的时候是反着的 ...

  5. POJ2337 欧拉路径字典序输出

    题意:       给一些单词,问是否可以每个单词只用一次,然后连接在一起(不一定要成环,能连接在一起就行). 思路:       这个题目的入手点比较好想,其实就是问欧拉路径,先说下解题步骤,然后在 ...

  6. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  7. 图论的起源:柯尼斯堡七桥(一笔画)问题与欧拉路径/回路

    柯尼斯堡七桥问题 大数学家欧拉一生中的大部分时间在俄国和普鲁士度过.1735年,他提出了著名的柯尼斯堡七桥(Seven Bridges of Königsberg)问题: 柯尼斯堡(今俄罗斯加里宁格勒 ...

  8. 欧拉回路 欧拉路径

    欧拉路径(瞎)定义 : 如果有一条路径使得能够走完所有的边且每一条边经过有且只有一次,这样的路径叫做欧拉路径 欧拉回路定义 : 如果有从起点出发最后回到起点的一条路径使得能够走完所有的边且每条边经过有 ...

  9. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

最新文章

  1. HDUOJ------Worm
  2. python数据库编程(1):潦草的开篇
  3. 微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
  4. SuperMap.IS.AjaxScript缓冲区分析及专题图制作
  5. 记一次mogodb占用cpu高问题
  6. 修改eclipse默认编码方式
  7. websocket传输数据大小限制_websocket 发送字符串数据上限是多少
  8. 全面掌握ping命令(三) ping命令防火墙设置
  9. Screens的开发一
  10. 【转载保存】Ubuntu14.04安装pycharm用于Python开发环境部署,并且支持pycharm使用中文输入
  11. SWOT分析模板框架
  12. OC5022B内置MOS的开关降压型恒流驱动芯片
  13. javascript检测各种浏览器型号和版本、检测是否支持flash并显示版本
  14. weblogic相关问题
  15. input 监听回车键
  16. MySQL的yum源
  17. 【风电功率预测】麻雀算法优化BP神经网络风电功率预测【含Matlab源码 1319期】
  18. 徕卡DNA03水准仪USB驱动
  19. 远程办公软件,帮助你解决更多办公烦恼
  20. 疯狂java讲义(第三版-李刚) 源代码 光盘

热门文章

  1. DataFrame/Series获取列名以及更改列名(转)
  2. 《C4.5: Programs for Machine Learning》chaper4实验结果重现
  3. 图片转注释python代码(转)
  4. ubunut16.04解决网速慢的办法
  5. leetcode :动态规划
  6. 大话数据结构 01 :顺序线性表
  7. 常用的正则表达式的运用--学习笔记(二)
  8. cdh编译安装支持各种压缩格式
  9. vue中央事件总线eventBus的简单理解和使用
  10. RedisManager使用手册(二) -- 配置文件详解