zoj 2016 poj 1386 Play on Words 欧拉回路+DFS
2015-08-03 14:59
239 查看
我的新博客:http://xiang578.top/
我的新博客:http://xiang578.top/
#include<stdio.h> #include<string.h> #include<vector> #include<string> #include<iostream> #include<algorithm> using namespace std; int mp[50][50],in[50],out[50],vis[50],use[50]; string str; void dfs(int u) { //printf("%d\n",u); vis[u]=1; for(int v=0;v<26;v++) { if(mp[u][v]&&!vis[v]) { dfs(v); } } } int main() { int _,i,n,u,v; int f1,f2,st,ed,f; scanf("%d",&_); while(_--) { scanf("%d",&n); memset(mp,0,sizeof(mp)); memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); memset(vis,0,sizeof(vis)); memset(use,0,sizeof(use)); for(i=0;i<n;i++) { cin>>str; u=str[0]-'a'; v=str[str.size()-1]-'a'; out[u]++; in[v]++; mp[u][v]++; use[u]=1; use[v]=1; } f1=f2=0; st=-1; for(i=0;i<26;i++) { if(!use[i]) continue; if(in[i]==out[i]) { if(st==-1) st=i; } else if(in[i]-out[i]==1) { f1++; if(f1>=2) break; } else if(out[i]-in[i]==1) { st=i; f2++; if(f2>=2) break; } else { f1=f2=-1; break; } } if((f1==0&&f2==0)||(f1==1&&f2==1)) { dfs(st); for(i=0,f=1;i<26;i++) { if(!vis[i]&&use[i]) { f=0;break; } } } else f=0; if(f) printf("Ordering is possible.\n"); else printf("The door cannot be opened.\n"); } return 0; }
我的新博客:http://xiang578.top/
相关文章推荐
- 南邮 OJ 1043 合法序列
- 操作分布式文件之六:如何解析远程文件
- Android egl和opengl
- 常用的ASCII
- 基于MFC的串口通信
- POJ2528 Mayor's posters 线段树
- LeetCode#221 Maximal Square
- 第十三天 UDP
- POJ 1236:Network of Schools
- Flash Builder常见菊紧问题集锦
- POJ 1236:Network of Schools
- Factstone Benchmark
- Loadrunner 使用过程常见问题
- SpringMVC后台接收前台传来数据的三种简单方式
- 9.2链表(五)——给定两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部
- 再谈select, iocp, epoll,kqueue及各种I/O复用机制
- Activity的生命周期
- C程序设计语言——导言
- 代码实现HDFS数据上传和下载
- php通过排列组合实现1到9数字相加都等于20的方法