太无语了。

这道题做了一整天。

主要还是我太弱了。

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

题目中的输出字典序最小我有点搞不清楚,看了别人是这么写的。但是我发现我过不了后面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_JUDGE
freopen("D:\\acm.txt","r",stdin) ;
#endif
cin >> 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 ;
}

POJ 2337 输出欧拉路径的更多相关文章

  1. poj 2337 有向图输出欧拉路径

    Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10186   Accepted: 2650 Descrip ...

  2. POJ 2337 Catenyms(有向欧拉图:输出欧拉路径)

    题目链接>>>>>> 题目大意: 给出一些字符串,问能否将这些字符串  按照 词语接龙,首尾相接  的规则 使得每个字符串出现一次 如果可以 按字典序输出这个字符串 ...

  3. POJ 2337 Catenyms(欧拉回(通)路:路径输出+最小字典序)

    题目链接:http://poj.org/problem?id=2337 题目大意:给你n个字符串,只有字符串首和尾相同才能连接起来.请你以最小字典序输出连接好的单词. 解题思路:跟POJ1386一个意 ...

  4. poj 2337 Catenyms 【欧拉路径】

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

  5. POJ 2337 Catenyms (有向图欧拉路径,求字典序最小的解)

    Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8756   Accepted: 2306 Descript ...

  6. poj 2337 欧拉回路输出最小字典序路径 ***

    把26个小写字母当成点,每个单词就是一条边. 然后就是求欧拉路径. #include<cstdio> #include<iostream> #include<algori ...

  7. Catenyms POJ - 2337(单词+字典序输出路径)

    题意: 就是给出几个单词 看能否组成欧拉回路或路径  当然还是让输出组成的最小字典序的路 解析: 还是把首尾字母看成点   把单词看成边 记录边就好了 这题让我对fleury输出最小字典序又加深了一些 ...

  8. poj 2337(单向欧拉路的判断以及输出)

    Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11648   Accepted: 3036 Descrip ...

  9. POJ 2337 Catenyms

    http://poj.org/problem?id=2337 题意: 判断给出的单词能否首尾相连,输出字典序最小的欧拉路径. 思路: 因为要按字典序大小输出路径,所以先将字符串排序,这样加边的时候就会 ...

随机推荐

  1. javascript系列之DOM(一)

    原文:javascript系列之DOM(一) DOM(document object moudle),文档对象模型.它是一个中立于语言的应用程序接口(API),允许程序访问并修改文档的结构,内容和样式 ...

  2. T4模版引擎之生成数据库实体类

    在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中我们使用的最普遍的是根据数据库生成实 ...

  3. Oracle 指数 一个简短的引论

    1 索引创建语法: CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>       ON <schema>.< ...

  4. 大话设计模式C++达到-文章16章-国家模式

    一.UML画画 二.概念 状态模式(State):当一个对象的内在状态改变时同意改变其行为.这个对象看起来像是改变了其类. 三.说明 以下是来自书本和网络的对状态模式的定义和分析: (1)状态模式同意 ...

  5. Swift 语言概览 -自己在Xcode6 动手写1

    原文:Swift 语言概览 -自己在Xcode6 动手写1 Swift是什么? Swift是苹果于WWDC 2014发布的编程语言,这里引用The Swift Programming Language ...

  6. dedeCMS中单独调用子栏目模板和子栏目的文章时修改源代码给channel和chanenartllist加上limit

    在网站文件中找到include-taglib-chanel.lib.php,和chaneartllist.lib.php 下载用php的IDE打开, chanel.php加入limit属性修改如下 & ...

  7. Mvc 导出 Excel

    Mvc 导出 Excel 之前接触过Webform,winfrom 的导出Excel方法 ,优点:省事.缺点:服务器必须安装Office 这几天做项目 和 大牛学习了一下 新的方法,自己加以总结.希望 ...

  8. C# 关闭子线程的方法

    将子线程设定为IsBackGroud = true,程序关闭则自动死亡. 暴力手段:System.Environment.Exit(0).关闭时直接x掉所有线程. 子线程自行结束:子线程中自己判断.可 ...

  9. jQuery EasyUI API - Layout - Layout[原创汉化官方API]

    最近在学习jQuery EasyUI,发现中文的文档好少,部分文档不错但它是鸟语的,为了大家也为了自己学习吧,汉化做一下笔记. 有没有说清楚的,或者翻译不正确的地方还请大家谅解指出.. 由于工作时间原 ...

  10. WP 开发中.xaml 与.xaml.cs

    关于 WP 开发中.xaml 与.xaml.cs 的关系   今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: ...