POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)
题意:给出n个字符,m对关系,让你输出三种情况:
1.若到第k行时,能判断出唯一的拓扑序列,则输出:
Sorted sequence determined after k relations: 序列
2.若到第k行,出现环,则输出:
Inconsistency found after k relations.
3.若直到m行后,仍判断不出唯一的拓扑序列,则输出:
Sorted sequence cannot be determined.
思路:每读取一行,就进行一次拓扑排序,为防止影响之后的拓扑排序,拓扑排序时用的入度数组为into2。
如果拓扑排序能得出唯一的序列,即为第一种情况,之后只要直接读取数据,不必操作。
如果拓扑排序时不存在入度为0的节点,则为第二种情况,之后只要直接读取数据,不必操作。
如果拓扑排序时有多个入度为0的节点,则继续读取数据再操作,直至读完m行。
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm> using namespace std;
int into[],into2[]; //存储节点的入度数
int edge[][];
int ans[],idx; //存储拓扑序列
int row,n,m; //row存储最后唯一判断出拓扑序列或者出现环的行数 int topo(int n){
int i,j=,k,t=,mark=;
while(j<n){
t=;
//统计入度为0的节点个数
for(i=;i<n;i++){
if(into2[i]==){
t++;
if(t==)
k=i;
}
}
//当入度为0的点大于1个时,也存在有环的情况!所以当t>1时,不能直接return 0,也要继续拓扑下去,看是否有当t=0的情况,
if(t>){
mark=;
}
if(t==)
return -; //没找到入度为0的点,有环存在
ans[j++]=k;
into2[k]=-;
for(i=;i<n;i++){
if(edge[k][i])
into2[i]--;
}
}
return mark;
}
int main()
{
char a,b,c;
char str[];
int flag,tmp,u,v;
while(scanf("%d%d",&n,&m)!=EOF){
if(n== && m==)
break;
memset(edge,,sizeof(edge));
memset(into,,sizeof(into));
memset(into2,,sizeof(into2));
memset(vis,,sizeof(vis));
idx=;
flag=;//flag=1为第一种情况,=-1为第二种情况,=0为第三种情况
for(int i=;i<=m;i++){
scanf("%s",str);
a=str[];b=str[];
if(flag== || flag==-)
continue;
u=a-'A';v=b-'A';
edge[u][v]=;
into[v]++;
into2[v]++;
tmp=topo(n);
if(tmp==-){
row=i;
flag=-; //有环,即出现矛盾
}
else if(tmp==){
for(int q=;q<;q++)
into2[q]=into[q];
continue;
}
else{
row=i;
flag=;
}
}
if(flag==){
printf("Sorted sequence determined after %d relations: ",row);
for(int i=;i<n;i++)
printf("%c",ans[i]+'A');
printf(".\n");
}
else if(flag==-){
printf("Inconsistency found after %d relations.\n",row);
}
else{
printf("Sorted sequence cannot be determined.\n");
} }
return ;
}
POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)的更多相关文章
- [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- ACM: poj 1094 Sorting It All Out - 拓扑排序
poj 1094 Sorting It All Out Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & ...
- poj 1094 Sorting It All Out (拓扑排序)
http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- POJ 1094 Sorting It All Out (拓扑排序) - from lanshui_Yang
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- poj 1094 Sorting It All Out_拓扑排序
题意:是否唯一确定顺序,根据情况输出 #include <iostream> #include<cstdio> #include<cstring> #include ...
- POJ 1094 Sorting It All Out 拓扑排序 难度:0
http://poj.org/problem?id=1094 #include <cstdio> #include <cstring> #include <vector& ...
- PKU 1094 Sorting It All Out(拓扑排序)
题目大意:就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列. 是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序列有序,并依次输出: 2.判断该序列是否唯一: 3.该序列字母次序之间 ...
- 图论--拓扑排序--判断是否为DAG图
#include<cstdio> #include<cstring> #include<vector> #include<queue> using na ...
- POJ - 1094 Sorting It All Out(拓扑排序)
https://vjudge.net/problem/POJ-1094 题意 对于N个大写字母,给定它们的一些关系,要求判断出经过多少个关系之后可以确定它们的排序或者排序存在冲突,或者所有的偏序关系用 ...
- hdoj 4324 Triangle LOVE【拓扑排序判断是否存在环】
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
随机推荐
- ListView Web 服务器控件概述(MSDN)
1: "折叠"图像"展开"图像"复制"图像"复制悬停"图像 全部折叠全部展开 代码:全部 代码:多个 代码:Visual ...
- 在Windows Phone中使用HTML编程
在开发Windows Phone的项目中,需求中有几个页面是要用表格来布局的(效果图如下),由于Grid中有的边线是虚的,而且没有边线,果断放弃了,用了border将表格的线加上去了.于是在有表格布局 ...
- android SDK启动的错误
1. AVD Manager.exe : failed to execute tools android.bat 请把AVD Manager.exe复制到跟 SDK Manager.exe的相同目录下 ...
- ADO.NET笔记——调用存储过程
相关知识: 在ADO.NET访问SQL Server时,鼓励使用存储过程取代常规的SQL语句. 存储过程有下列优点: 存储过程中的SQL语句将会经过预先的解析和编译,然后存放在数据库服务器上行.调用的 ...
- Linux C 程序 进程控制(17)
进程控制 1.进程概述现代操作系统的特点在于程序的并行执行.Linux是一个多用户多任务的操作系统.ps .pstree 查看进程进程除了进程id外还有一些其他标识信息,可以通过相应的函数获得.// ...
- 万能的SQLHelper帮助类
/// <summary> /// 数据库帮助类 /// </summary> public class SQLHelper { private static string c ...
- 团队自动化环境搭建与管理--php博弈
我是方少,很开心与大家日后与大家交流技术上面的一些想法和一些业务上的分享.以前从来没写过博客,因为觉得不重要吧,如今觉得有必要沉淀一些想法和回忆.好了费话不多说. 先上图: 业务问题:在每次新伙伴加入 ...
- Win7开始菜单之【附件】不全解决方案
Win7开始菜单之[附件]不全解决方案 1:打开你的[开始]菜单,转到附件,如果你发现你的附件里的“附件”不是那么全的话,如下图:来吧,我告诉你如何恢复它到最初的模样……哦,或许如果你不急于恢复的话, ...
- Spark菜鸟学习营Day5 分布式程序开发
Spark菜鸟学习营Day5 分布式程序开发 这一章会和我们前面进行的需求分析进行呼应,完成程序的开发. 开发步骤 分布式系统开发是一个复杂的过程,对于复杂过程,我们需要分解为简单步骤的组合. 针对每 ...
- python post中文引发的不传递,及乱码问题
使用jquery ajax向后台传值 $.ajax({ type:"POST", url:"" data:{ content:content }, succes ...