POJ-1094 Sorting it All Out
一个字母,则入度加一,并把小的当成大的字母的一个的出度,如果有一个入度为0就输出,并把其其所有出度点减一个入度,循环n次,若一次循环出两个字母,则排序失败,但不跳出,因为一旦遇到了一次循环根本无法输出,则输入结束后输出Inconsistency found after t relations.,t为这条指令的序号(每输入一个指令就判断),当然,若当次就能判断顺序,我们就把t和输出顺序存下来,到最后再输出。
注意:如果排序已经成功,则不用再管有没有回路的情况,若已存在回路的情况,则不再管排序能不能成功,所以,当已经存在回路或已经成功排序时就不用再做处理了。
#include<iostream>
using namespace std;
int n,m,sh=0,a[1001]={0},t,c[10001]={0},b[101][101]={0},loc[1001]={0},d[10001]={0};
int a1[10000001],b1[10000001];
int main(){string s;while(cin>>n>>m&&n!=0&&m!=0){//只要还在输入for(int i=1;i<=m;i++){cin>>s;、、输入指令if(s[1]=='>'){//如果中间的是大于b[(s[0]-'A'+1)][0]++;b[(s[0]-'A'+1)][b[(s[0]-'A'+1)][0]]=(s[2]-'A'+1);b[(s[0]-'A'+1)][b[(s[0]-'A'+1)][0]]=i;a[(s[2]-'A'+1)]++;d[(s[2]-'A'+1)]++;}else {//如果中间的是小于b[(s[2]-'A'+1)][0]++;b[(s[2]-'A'+1)][b[s[2]-'A'+1][0]]=(s[0]-'A'+1); a[(s[0]-'A'+1)]++;d[(s[0]-'A'+1)]++; }if(sh==0&&z==0){//如果还没排出序而且还不存在回路,则进行模拟bool panda=0;for(int l=1;l<=n;l++){//要用其他东西存起来,不然排序失败就完了c[l]=a[l];}int BS=0;for(int s=1;s<=n;s++){int ans=0;for(int j=1;j<=n;j++){if(a[j]==0){c[j]--;BS++;//输出的字母的个数加1ans++;if(ans==2){//有多个入度为0的则排序失败,但还有继续排序panda=1;}loc[s]=j;//输出顺序int k=b[j][0]; for(int t=1;t<=k;t++){c[b[j][t]]--;}}if(ans==2){panda=1;}}for(int l=1;l<=n;l++){a[l]=c[l];}if(ans==0&&BS!=n){//如果不存在入度为0的点且还没有输出完,则存在回路sh=2;t=i;panda=1;break;}else if(ans>=2){panda=1;}
}
if(panda==0){//排序成功if(z==0)z=i;
}
}
for(int ss=1;ss<=n;ss++){a[ss]=c[ss]=d[ss];
}
}
if(z!=0){//输出cout<<"Sorted sequence determined after "<<z<<" relations: ";
for(int ll=n;ll>=1;ll--)cout<<char(loc[ll]+'A'-1);
cout<<"."<<endl;
}
else {
if(sh==0)
cout<<"Sorted sequence cannot be determined."<<endl;
else if(sh==2)cout<<"Inconsistency found after "<<t<<" relations."<<endl;
}
sh=0;z=0;
for(int i=1;i<=26;i++){//清0for(int j=0;j<=26;j++){b[i][j]=e[i][j]=0;vis[i][j]=0;}
}
for(int t=1;t<=26;t++){
a[t]=c[t]=d[t]=0;
}
}
}
转载于:https://www.cnblogs.com/c201904xyorz/p/9990797.html
POJ-1094 Sorting it All Out相关推荐
- POJ 1094 Sorting It All Out (拓扑排序)
题意:给你一些大写字母间的偏序关系,然后让你判断能否唯一确定它们之间的关系,或者所给关系是矛盾的,或者到最后也不能确定它们之间的关系. 由DAG图节点的偏序关系确定节点的排序可以由拓扑排序求出.而 ...
- POJ - 1094 Sorting It All Out(拓扑排序)
https://vjudge.net/problem/POJ-1094 题意 对于N个大写字母,给定它们的一些关系,要求判断出经过多少个关系之后可以确定它们的排序或者排序存在冲突,或者所有的偏序关系用 ...
- POJ - 1094 Sorting It All Out(拓扑排序+floyd传递闭包)
题目链接:点击查看 题目大意:给出N个点以及M个比较关系,问在第几个数字可以确定出唯一的序列,或者判断出矛盾的序列,或者最后也无法确定出一个唯一的序列 题目分析:关于这个题目可以直接分类讨论,可以直接 ...
- poj 1094 Sorting It All Out(拓扑排序)
2018-3-25 拓扑排序的题目,需要注意的是,这里是边输入边判断的,之前有一组数据一直不知道为什么不过: A>F B>D C>E F>D D>E E>F 其实当 ...
- Poj 1094 拓扑排序Kahn
Poj 1094 拓扑排序Kahn Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4133 ...
- POJ 1094拓补排序
POJ 1094拓补排序问题,需要加一些判断 #include <cstdio> #include <queue> #include <vector> #inclu ...
- POJ 1486 Sorting Slides
POJ_1486 这个题目相当于判断是否存在唯一的二分图最大匹配的问题,只不过最后即便没有唯一的二分图最大匹配,也将已经匹配好的输出即可. 在匹配的时候采用贪心的策略,如果当前有一个点只连了一条边,那 ...
- POJ 1486 Sorting Slides(二分图完全匹配必须边)题解
题意:给你n张照片的范围,n个点的坐标,问你能唯一确定那几个点属于那几张照片,例如样例中4唯一属于A,2唯一属于C,1唯一属于B,3唯一属于C 思路:进行二分图完全匹配,怎么判断唯一属于?匹配完之后删 ...
- POJ 1094 拓扑排序
题意大坑,建议先看Discuss-- 否则代码写得就像以下的一团糟.... 其实并不难,拓扑排序+乱搞就可以AC. // by SiriusRen #include <cstdio> #i ...
- 0x61.图论 - 最短路
目录 单源最短路径 一.Dijkstra算法 1.常用的优先队列优化 2.更优的线段树优化 3.最强的zkw线段树优化 二.SPFA算法 三.分层图最短路 1.(二维分层图)AcWing 340. 通 ...
最新文章
- Python 技术篇-用os库读取本地文件的字节数、文件大小
- ios android 发东西,Android、IOS主动发事件给React Native
- SDRAM工作的大体流程
- 【转】C#委托事件浅析
- linux协议栈劫持,Linux系统优化之TCP协议栈优化-基本篇1
- ASP.NET 5 - $.ajax post JSON.stringify(para) is null
- 案例:实现第一个Filter程序
- 交流磁路matlab,严格地说,交流磁路计算应该用磁滞回线。
- 数据结构c java_Java - 数据结构
- 关于MAC中anaconda下python版本的问题
- f2fs系列之五:冷热数据分离
- win10和深度linux双系统,深度系统(deepin)与win10双系统切换设置
- Word2013怎样从任意页开始设置页码
- Html页面上展示Excel表格 --Handsontable
- Linux-引导过程与服务控制
- python音频转文字腾讯_使用Python三步完成文本到语音的转换
- 怎么解决访问所有HTTPS网站显示连接不安全
- PB DW内容自适应
- 计算机组装实验感受,计算机组装实习心得3篇
- 如何培养孩子独立思考的能力?