POJ2337 Catenyms 欧拉路径
来源:互联网 发布:js await async 多线程 编辑:程序博客网 时间:2024/04/27 13:40
题目链接:http://poj.org/problem?id=2337
题目大意:给出n个单词,找出他们之间一条字典序最小的连接路径。两个单词能连接当且仅当前一个单词的尾字母等于后一个单词的首字母。
分析:单词接龙,POJ1386的升级,需要输出路径。我们可以先把这些单词排序,然后在进行建图,这样我们在dfs的时候就等于直接按字典序来搜索了。
实现代码如下:
#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <iostream>using namespace std;struct EDGE{ int to,nex; int id; bool flag;}edge[2020];int head[30],cnt;void add(int u,int v,int id){ edge[cnt].to=v; edge[cnt].nex=head[u]; edge[cnt].id=id; edge[cnt].flag=false; head[u]=cnt++;}string str[1010];int ind[30];int ans[1010],ansi;void dfs(int x){ for(int i=head[x];i!=-1;i=edge[i].nex) if(!edge[i].flag) { edge[i].flag=true; dfs(edge[i].to); ans[ansi++]=edge[i].id; }}int main(){ int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) //scanf("%s",str[i]); cin>>str[i]; sort(str,str+n); cnt=0; memset(head,-1,sizeof(head)); memset(ind,0,sizeof(ind)); int start=100; for(int i=n-1;i>=0;i--) { int u=str[i][0]-'a'; int v=str[i][ str[i].length()-1 ]-'a'; add(u,v,i); ind[u]--; ind[v]++; if(u<start) start=u; if(v<start) start=v; } int ling=0,zheng=0,fu=0; for(int i=0;i<26;i++) { if(ind[i]==0) ling++; else if(ind[i]==1) zheng++; else if(ind[i]==-1) { fu++; start=i; } } if(!(ling==26||(ling==24&&zheng==1&&fu==1))) { puts("***"); continue; } ansi=0; dfs(start); if(ansi<n) { puts("***"); continue; } for(int i=ansi-1;i>=0;i--) { //printf("%s",str[ ans[i] ]); cout<<str[ ans[i] ]; if(i>0) printf("."); else printf("\n"); } } return 0;}/*测试数据(输出应和第一组样例一样)26arachnidalohadoggopherrattiger6arachnidtigergopheraloharatdog*/
0 0
- POJ2337 Catenyms 欧拉路径
- POJ2337 Catenyms 欧拉路径的输出
- POJ2337 Catenyms【欧拉回路】
- poj2337 Catenyms(求欧拉路或欧拉回路的路径)
- POJ2337 Catenyms 字典序输出欧拉路径
- POJ2337 Catenyms(欧拉回路+dfs)
- POJ2337 欧拉路径
- 欧拉回路打印路径poj2337
- POJ2337 欧拉路径字典序输出
- POJ2337---Catenyms
- POJ2337 Catenyms
- poj 2337 Catenyms 【欧拉路径】
- POJ 2337 Catenyms(欧拉路径)
- POJ2337/UVA10441 Catenyms
- poj2337 Catenyms【欧拉图】
- Catenyms poj hoj 欧拉回路输出路径
- poj 2337 Catenyms (欧拉路径+字典序最小)
- POJ 2337 Catenyms(有向欧拉图:输出欧拉路径)
- CodeForces 553B Kyoya and Permutation(找规律)
- C#截取字符串长度 返回string
- uboot1.1..6移植到jz2440补充
- Linux学习笔记
- 【iOS奇葩特性】layoutSubviews在iPhone和iPad中,当设备方向改变后的调用情况
- POJ2337 Catenyms 欧拉路径
- JNI学习1——Android jni GetFieldID 和 GetMethodID 函数的说明
- 多校第十场1009 CRB and String题解
- 黑马程序员-java基础-Collection遍历的两种方式
- 关于C#的delegate(委托)和event(事件)的使用
- [Leetcode]Majority Element II
- Topcoder SRM 662 Div1, ExactTree,DP
- XDU-1112 Too Stupid(DP)
- Host Header Site Collection身份验证失败,无法登陆的解决方案