POJ 1094 Sorting It All Out (拓扑排序)
来源:互联网 发布:品控好的手机 知乎 编辑:程序博客网 时间:2024/05/18 02:11
题目类型 拓扑排序
题目意思
给出 n (2 <= n <= 26) 个大写字母和 m 个关系 每个关系形是"A<B"这样的格式
现在从第1个关系按顺序往后看 如果到第 i 个关系时出现矛盾则输出在第 i 个关系后矛盾了 如果到第 i 个关系时大写字母的顺序已经唯一确定那么输出确定后的序列 如果到最后依然没唯一确定顺序输出不能确定顺序
解题方法
直接按照题目意思每输入一个关系判断一下就行了
参考代码 - 有疑问的地方在下方留言 看到会尽快回复的
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <vector>using namespace std;const int maxn = 1000;char str[maxn][10];vector<int>M[30];int res[30], num[30], n, tm[30];bool vis[30];int topo() {queue<int>q;int tn = 0;for( int i=0; i<26; i++ ) {if(num[i] == 0 && vis[i]) q.push(i);if(vis[i]) tn++;tm[i] = num[i];}int cnt = 0;int flag = 0;while(!q.empty()) {if(q.size() > 1) flag = 1; // 出现两个以上入度为0的点则没确定唯一顺序int f = q.front(); q.pop();res[cnt++] = f;for( int i=0; i<M[f].size(); i++ ) {tm[M[f][i]]--;if(tm[M[f][i]] == 0) q.push(M[f][i]);}}if(cnt == n) { // 完成排序if(flag == 0) return 2; //唯一排序else return 1;}else if(cnt != tn) return 0; //没完成排序即有冲突else return 1; //没有唯一的顺序}int main() {freopen("in", "r", stdin);int m;while(scanf("%d%d", &n, &m), n || m) {for( int i=0; i<26; i++ ) num[i] = 0, M[i].clear();memset(vis, 0, sizeof(vis));bool flag = true;for( int i=0; i<m; i++ ) {scanf("%s", str[i]);if(flag == false) continue;num[str[i][2]-'A']++;M[str[i][0]-'A'].push_back(str[i][2]-'A');vis[str[i][0]-'A'] = vis[str[i][2]-'A'] = true;int tmp = topo();if(tmp == 0) {flag = false;printf("Inconsistency found after %d relations.\n", i+1);}else if(tmp == 2) {flag = false;printf("Sorted sequence determined after %d relations: ", i+1);for( int j=0; j<n; j++ ) printf("%c", res[j]+'A');printf(".\n");}}if(flag == false) continue;printf("Sorted sequence cannot be determined.\n");}return 0;}
0 0
- POJ 1094 Sorting It All Out(拓扑排序)
- Poj 1094-Sorting It All Out [拓扑排序]
- POJ 1094-Sorting It All Out 拓扑排序
- zoj 1060 || poj 1094 Sorting It All Out(拓扑排序)
- POJ 1094 Sorting It All Out 拓扑排序
- POJ 1094 Sorting It All Out 拓扑排序
- POJ 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out 拓扑排序
- POJ 1094 Sorting It All Out (拓扑排序)
- POJ 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out(拓扑排序)
- poj 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out (拓扑排序)
- poj 1094 Sorting It All Out (拓扑排序)
- Poj 1094 Sorting It All Out——拓扑排序
- POJ 1094 Sorting It All Out 拓扑排序+Floyd算法
- POJ 1094 Sorting It All Out (拓扑排序) - from lanshui_Yang
- 归档误删除,RMAN备份失败
- javascript 正则表达式操作
- UIView部分方法和属性总结
- onServiceConnected,onServiceDisconnected
- WindowManager实现悬浮窗口
- POJ 1094 Sorting It All Out (拓扑排序)
- thinkphp验证码的验证
- express4.x新特性以及如何从3.x升级到4.x
- 算法设计学习笔记:回文数与回文字符串判断
- Core Location定位
- SP与CP的区别
- SVN的简单使用
- 最近看书的心态
- MKNetworkKit 断点续传