uva 10129 - Play on Words
2013-05-02 17:39
411 查看
花了很长时间才勉强明白的。。。。。。
欧拉回路的题目:
首先在读入的时候只需要提取出单词的首尾字母就可以了,并且用 in[] 和out[]数组记录每一个字母的入度和出度。dfs函数判断是否是连通的,这个函数这段时间经常用。。接着是判断入度和出度:判断一共有几个点是入度和出度不等的,如果超过两个点,就一定没有欧拉道路存在;如果是2个点,要判定这个两个点是不是一个是起点,一个是汇点,起点是出度比入度大一,汇点是入度比出度大1,如果不满足条件也是没有解的;小于2个点的,就是有欧拉道路存在!参考博客
#include<cstdio> #include<cstring> using namespace std; int map[30][30],vis[30],in[30],out[30]; int cnt,q[100000]; void dfs(int u) { vis[u]=1; int front=0,rear=0; q[rear++]=u; while(front<rear) { u=q[front++]; for(int i=0; i<26; i++) { if(!vis[i]&&(map[u][i]||map[i][u])) { vis[i]=1; q[rear++]=i; cnt++; } } } } int main() { int cas,n,cor; char str[1010]; scanf("%d",&cas); while(cas--) { scanf("%d\n",&n); memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); cor=0; for(int i=0; i<n; i++) { scanf("%s\n",str); int a,b; a=str[0]-'a'; b=str[strlen(str)-1]-'a'; map[a][b]++; in[a]++; out[b]++; if(!vis[a]) { cor++; vis[a]=1; } if(!vis[b]) { cor++; vis[b]=1; } } memset(vis,0,sizeof(vis)); cnt=1; dfs(0); if(cnt!=cor) { printf("The door cannot be opened.\n"); continue; } int mark=0,inn=-1,outt=-1; for(int i=0; i<26; i++) { if(in[i]!=out[i]) { mark++; if(in[i]-out[i]==1) inn=i; else outt=i; } if(mark>2) { printf("The door cannot be opened.\n"); break; } } if((mark==2&&inn!=-1&&outt!=-1)||mark<2) printf("Ordering is possible.\n"); else if(mark<=2) printf("The door cannot be opened.\n"); } return 0; }
欧拉回路的题目:
首先在读入的时候只需要提取出单词的首尾字母就可以了,并且用 in[] 和out[]数组记录每一个字母的入度和出度。dfs函数判断是否是连通的,这个函数这段时间经常用。。接着是判断入度和出度:判断一共有几个点是入度和出度不等的,如果超过两个点,就一定没有欧拉道路存在;如果是2个点,要判定这个两个点是不是一个是起点,一个是汇点,起点是出度比入度大一,汇点是入度比出度大1,如果不满足条件也是没有解的;小于2个点的,就是有欧拉道路存在!参考博客
相关文章推荐
- Uva 10129 - Play on Words
- uva 10129 Play on Words(欧拉路)
- UVA - 10129 Play on Words
- uva 10129 - Play on Words
- 例题6-16 UVA 10129 Play On Words单词
- uva 10129 Play on Words
- uva -10129 - Play on Words
- UVA Play On Words 10129
- (欧拉回路)uva 10129 Play On Words
- uva 10129 play on words——yhx
- uva 10129 - Play on Words
- UVa 10129 - Play on Words
- UVA 10129 Play on Words(欧拉回路)
- UVa 10129 Play On Words
- UVa 10129 Play on Words ( euler path )
- uva 10129 poj 1386 hdu 1116 zoj 2016 play on words
- UVA - 10129 Play on Words
- UVA - 10129 Play on Words
- UVA 10129 Play on Words
- UVa 10129 & HDU 1116 & POJ 1386 - Play on Words