UVA 10129 欧拉回路 判断连通性
来源:互联网 发布:centos 安装php 编辑:程序博客网 时间:2024/05/02 04:39
题意:输入n个单词,判断是否可以使这些单词排成一列,每个单词的第一个字母与上一个单词的最后一个字母相同,最后一个字母与下一个单词的第一个字母相同
解法:以每个单词的首尾字母为点,单词为边,DFS判断图的连通性,然后判断是否存在欧拉通路
#include<bits/stdc++.h>using namespace std;char str[1005];int f[30][30];int in[30], out[30];void dfs(int u){ for(int i = 0; i < 26; ++i){ if(f[u][i] || f[i][u]){ if(f[u][i]) f[u][i]--; if(f[i][u]) f[i][u]--; dfs(i); } }}int main(){ int t; scanf("%d",&t); while(t--){ memset(f,0,sizeof(f)); memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); int n; scanf("%d",&n); int u,v; for(int i = 1; i <= n; ++i){ scanf("%s",str); int len = strlen(str); u = str[0]-'a', v = str[len-1]-'a'; f[u][v]++; out[u]++, in[v]++; } bool res = 1; dfs(u); for(int i = 0; i < 26; ++i){ for(int j = 0; j < 26; ++j){ if(f[i][j]){ res = 0; break; } } if(!res) break; } if(res){ int num1 = 0, num2 = 0, num = 0; for(int i = 0; i < 26; ++i){ if(in[i] == out[i] + 1){ num1++; } else if(in[i] == out[i] - 1){ num2++; } else if(in[i] == out[i]){ num++; } } if(num == 24 && num1 == 1 && num2 == 1 || num == 26) printf("Ordering is possible.\n"); //有向图存在欧拉通路的判断依据:所有点的出度等于入度,或者只有一个点的出度等于入度加一,另一个点的出度等于入度减一,其余的点出度与入度相等 else printf("The door cannot be opened.\n"); } else printf("The door cannot be opened.\n"); }}
0 0
- UVA 10129 欧拉回路 判断连通性
- hdu 1878 欧拉回路,图的连通性判断
- 判断连通性 欧拉回路的性质 UVA10129
- [UVA 10129] Play on Words (图的连通性 + 欧拉回路)
- Uva 10129 (dfs判断连通 +欧拉回路)
- uva 10129(欧拉回路)
- 欧拉回路+图的连通性
- [UVA 10054] The Necklace (图的连通性 + 欧拉回路)
- POj 1386 Play on words 欧拉回路/通路,图的连通性判断
- uva10129 欧拉回路 判断出入度数 连通性 遍历压栈
- 欧拉回路判断
- 欧拉回路判断
- UVA 10054 欧拉回路
- uva 10054 欧拉回路
- UVA 10054 欧拉回路
- UVA 10054 欧拉回路
- 【UVa 10054】欧拉回路
- uva 10054 欧拉回路
- emacs常用快捷键<更新中>
- Angular2入门教程-2 实现TodoList App
- 如何评估应用交付优化解决方案的优势?
- malloc与new的使用
- OOP
- UVA 10129 欧拉回路 判断连通性
- 仿掌上英雄联盟能力值图形绘制
- 图片加载库picasso 缓存位置
- 深入理解Android之Gradle
- 关于AdapterView点击空白处事件
- cmdline传递
- 支持向量机通俗导论(理解SVM的三层境界)
- caffe 使用自带的_net.py绘制网络图问题
- 装饰器模式