PKU 1094 Sorting It All Out(拓扑排序)
题目大意:就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列。
是典型的拓扑排序,但输出格式上确有三种形式:
1.该字母序列有序,并依次输出;
2.判断该序列是否唯一;
3.该序列字母次序之间是否有矛盾,即是否有环存在;
而这三种形式的判断是有顺序的:先判断(3)是否有环,再判断是否有序(1),最后才能判断是否能得出结果(2)。注意:对于(2)必须遍历完整个图,而(1)和(3)一旦得出结果,对后面的输入就不用做处理了。
#include<cstdio>
#include<cstring>
char alp[];
int edge[][],in[];
int TopoSort(int n)
{
int t=,tmp[],flag=;
for(int i=;i<=n;i++)
tmp[i]=in[i];
for(int i=;i<=n;i++){
int in0=,loc;//查找入度为零的顶点个数
for(int j=;j<=n;j++){
if(tmp[j]==){
in0++;
loc=j;
}
}
if(in0==) return ;//有环,那么后面的就不用再判断了
if(in0>) flag=-;//不确定,但不能直接return -1;因为后面的字母中还可能形成环而return 0;
alp[t++]='A'+loc-;//入度为零的字母入队
tmp[loc]=-;
for(int k=;k<=n;k++)
if(edge[loc][k]==)
tmp[k]--;
}
return flag;
}
//flag=1:有序 flag=-1:不确定
int main()
{
int m,n,x,y;
char str[];
while(scanf("%d%d",&n,&m),n|m){
memset(edge,,sizeof(edge));
memset(in,,sizeof(in));
bool sign=;
for(int i=;i<=m;i++){
scanf("%s",str);
if(sign) continue; //一旦得出结果,对后续的输入不做处理,但是不能break,因为还得继续输入
x=str[]-'A'+;
y=str[]-'A'+;
edge[x][y]=;
in[y]++;
int flag=TopoSort(n);
if(flag==){//有环
printf("Inconsistency found after %d relations.\n",i);
sign=;
}
if(flag==){//有序
printf("Sorted sequence determined after %d relations: ",i);
for(int j=;j<n;j++)
printf("%c",alp[j]);
printf(".\n");
sign=;
}//当sign=1时表明已得出结果
}
if(!sign) //不确定
printf("Sorted sequence cannot be determined.\n");
}
return ;
}
PKU 1094 Sorting It All Out(拓扑排序)的更多相关文章
- 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 ...
- [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 ...
- 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& ...
- POJ 1094:Sorting It All Out拓扑排序之我在这里挖了一个大大的坑
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 29984 Accepted: 10 ...
- POJ1094 Sorting It All Out —— 拓扑排序
题目链接:http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Tot ...
- nyoj349 poj1094 Sorting It All Out(拓扑排序)
nyoj349 http://acm.nyist.net/JudgeOnline/problem.php?pid=349poj1094 http://poj.org/problem?id=10 ...
随机推荐
- android4.4上全屏界面实现禁止状态栏下拉
附上我改动的方法:PhoneWindowManager.java里面的改动 --- a/frameworks/base/policy/src/com/android/internal/policy/i ...
- C++之运算符重载
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- Jquery-easyUi------(布局)
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> <! ...
- OSG四元数与欧拉角之间的转换
osg::Quat HPRToQuat(double heading, double pitch, double roll) { osg::Quat q( roll, osg::Vec3d(0.0, ...
- Zabbix-3.0.3使用自带模板监控MySQL
导读 Zabbix是一款优秀的,开源的,企业级监控软件,可以通过二次开发来监控你想要监控的很多服务,本文介绍使用Zabbix自带的模板监控MySQL服务. 配置userparameter_mysql. ...
- word文档排版技巧
简介 市场部经常要出各种分析报告,一写就是洋洋洒洒几十页.文字功底深厚的小王写东西自然不在话下,然而每每困扰他的却是排版的问题,每次都要花大量的时间修改格式.制作目录和页眉页脚.最头疼的是上司看完报告 ...
- phpcms v9表单实现问答咨询功能
本文转自别人 phpcms v9的留言板插件可以安装留言板,做问答咨询,那样的话有很多东西需要修改,也有人发现phpcms v9有个表单向导功能,只能留言,不能回复,今天仿站网:新源网络工作室告诉大家 ...
- DNS rebinging攻击方式
一.什么是DNS rebinding? 在dns协议中,请求和响应完成一台机器对一个域名的查询,响应信息包含请求域名站点对应的IP地址.假设你向DNS服务器A请求域名youself.domain.co ...
- 通过AnimationSet 同步或一部播放多个动画 Android 属性动画(Property Animation) 完全解析 (下)
AnimationSet提供了一个把多个动画组合成一个组合的机制,并可设置组中动画的时序关系,如同时播放,顺序播放等. 以下例子同时应用5个动画: 播放anim1: 同时播放anim2,anim3,a ...
- java枚举类型(转载)
public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blu ...