POJ 2337 欧拉回路
题意:
如果给出的单词能够首尾相接,请按字典序输出单词,中间要加’.’
否则输出三个”*”.
思路:
欧拉回路
记得按字典序排序哦~
加边的时候要倒着加。(邻接表遍历的时候是反着的)
记得清空vis数组(因为这个无脑错误WA了好长时间。。。。。)
随便搞搞 就能过了。 数据不是很强…
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s[1005][25];
int first[60],next[1005],tot,top,v[1005];
int cases,n,ansx,ansy,ansz,in[26],out[26],ans[1005];
bool vis[1005],flag,VIS[26];
struct node{char str[25];int length;}edge[1005];
void add(int x,int y,int z){v[z]=y;next[z]=first[x];first[x]=z;}
bool cmp(node x,node y){return strcmp(x.str,y.str)>0?0:1;}
void dfs(int x){
for(int i=first[x];~i;i=next[i])
if(!vis[i]){
VIS[v[i]]=1;
vis[i]=1,dfs(v[i]);
ans[++top]=i;
}
}
int main(){
scanf("%d",&cases);
while(cases--){
memset(first,-1,sizeof(first));
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
memset(vis,0,sizeof(vis));
memset(VIS,0,sizeof(VIS));
flag=ansx=ansy=ansz=top=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",edge[i].str);
edge[i].length=strlen(edge[i].str);
out[edge[i].str[0]-'a']++;
in[edge[i].str[edge[i].length-1]-'a']++;
}
sort(edge+1,edge+1+n,cmp);
for(int i=n;i;i--)
add(edge[i].str[0]-'a',edge[i].str[edge[i].length-1]-'a',i);
for(int i=0;i<=25;i++){
if(in[i]-out[i]==1)ansx++;
else if(out[i]-in[i]==1)ansy++;
else if(in[i]!=out[i])ansz++;
}
if(!ansz&&ansx==ansy&&(ansx==0||ansx==1)){
int jy;
if(ansx==1){
for(int i=0;i<26;i++)
if(out[i]-in[i]==1){jy=i;break;}
}
else{
for(int i=0;i<26;i++)
if(out[i]){jy=i;break;}
}
VIS[jy]=1;
dfs(jy);
for(int i=0;i<=25;i++)
if((in[i]||out[i])&&!VIS[i])flag=1;
}
else flag=1;
if(!flag){
for(int i=top;i>=2;i--)
printf("%s.",edge[ans[i]].str);
printf("%s\n",edge[ans[1]].str);
}
else puts("***");
}
}
POJ 2337 欧拉回路的更多相关文章
- poj 2337 欧拉回路输出最小字典序路径 ***
把26个小写字母当成点,每个单词就是一条边. 然后就是求欧拉路径. #include<cstdio> #include<iostream> #include<algori ...
- poj 2337 && zoj 1919 欧拉回路+连通性判断
题目要求按字典序排列,而且可能有重边 所以一开始就将数组从大到小排列,那么我将字符串加入链表时就会令小的不断前移,大的被挤到后面 这里有一点问题就是我一开始使用的是qsort: int cmp(con ...
- POJ 2337 Catenyms (欧拉回路)
Catenyms Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8173 Accepted: 2149 Descript ...
- POJ 2337 【字典序】【欧拉回路】
题意: 给你一些单词,判断这些单词能否在保证首尾单词相同的情况下连成一排. 如果有多组解,输出字典序最小的一组解. 这题... WA了两天. 错误有以下: 1.没有初始化好起始位置,默认起始位置是a了 ...
- POJ 2337 Catenyms
http://poj.org/problem?id=2337 题意: 判断给出的单词能否首尾相连,输出字典序最小的欧拉路径. 思路: 因为要按字典序大小输出路径,所以先将字符串排序,这样加边的时候就会 ...
- POJ 2337 Catenyms(欧拉回(通)路:路径输出+最小字典序)
题目链接:http://poj.org/problem?id=2337 题目大意:给你n个字符串,只有字符串首和尾相同才能连接起来.请你以最小字典序输出连接好的单词. 解题思路:跟POJ1386一个意 ...
- poj 1041(欧拉回路+输出字典序最小路径)
题目链接:http://poj.org/problem?id=1041 思路:懒得写了,直接copy吧:对于一个图可以从一个顶点沿着边走下去,每个边只走一次,所有的边都经过后回到原点的路.一个无向图存 ...
- poj 1780 , poj 1392 欧拉回路求前后相互衔接的数字串
两道题目意思差不多 第一题是10进制 , 第二题是2进制的 都是利用欧拉回路的fleury算法来解决 因为我总是希望小的排在前面,所以我总是先将较小数加入栈,再利用另一个数组接收答案,但是这里再从栈中 ...
- poj 2337 Catenyms 【欧拉路径】
题目链接:http://poj.org/problem?id=2337 题意:给定一些单词,假设一个单词的尾字母与还有一个的首字母同样则能够连接.问能否够每一个单词用一次,将全部单词连接,能够则输出字 ...
随机推荐
- Deutsch lernen (13)
1. die Sicherheit, -en 安全(性) Was ist Ihnen wichtiger: Freiheit oder Sicherheit? Wie ist es mit der ...
- Generics of a Higher Kind
http://adriaanm.github.io/files/higher.pdf https://www.atlassian.com/blog/archives/scala-types-of-a- ...
- inherit 关键字使得元素获取其父元素的计算值
它可以应用于任何CSS属性,包括CSS简写 all. 对于继承属性,inherit 关键字只是增强了属性的默认行为,只有在重载(overload)其它规则的时候被使用.对于非继承属性,inherit ...
- PAT_A1150#Travelling Salesman Problem
Source: PAT A1150 Travelling Salesman Problem (25 分) Description: The "travelling salesman prob ...
- ADB 常用命令学习
参考文档:https://www.cnblogs.com/bravesnail/articles/5850335.html非常感谢作者的分享,以下是我学习的记录.Android 常用adb 命令汇总- ...
- 55.TF/IDF算法
主要知识点: TF/IDF算法介绍 查看es计算_source的过程及各词条的分数 查看一个document是如何被匹配到的 一.算法介绍 relevance score算法,简单来说 ...
- 今天写了一个简单的新浪新闻RSS操作类库
今天,有位群友问我如何获新浪新闻列表相关问题,我想,用正则表达式网页中取显然既复杂又不一定准确,现在许多大型网站都有RSS集合,所以我就跟他说用RSS应该好办一些. 一年前我写过一个RSS阅读器,不过 ...
- kotlin来了!!
小编前端时间由于工作比较繁忙,没有更新帖子... 最近又再技术博客上逛时发现了 “Kotlin”, 1.据听说挺厉害的,该语言是由战斗民族俄罗斯人发明的!! 2.据听说前后端都可以做 3.据听说安卓大 ...
- raize5的修改。
( ( ; Col1: $; Col2: $; Col3: $; Col4: $ ), ( ; Col1: $; Col2: $FA; Col3: $; Col4: $ ), ( ; Col1: $C ...
- 【hihocoder 1511】树的方差
[题目链接]:http://hihocoder.com/problemset/problem/1511 [题意] [题解] 有个方差的公式 V(X)=E(X2)−E(X)2 这里E(X)指的是X的期望 ...