1、题目类型:图论、拓扑排序。

2、解题思路:(1)每输入一组数据,进行拓扑排序;(2)内部形成环时(即出现冲突)TuoPu()返回-1;内部存在多个入度为0的点时(即无法判断)此时将f标识为1;当拓扑排序正确时,TuoPu()返回排序成功的节点个数;(3)根据TuoPu()的返回值,输出结果,仅当其返回值等于输入N时,结果正确。

3、注意事项:当存在冲突或者拓扑排序成功时,之后的输入不对结果造成影响。

4、实现方法:

#include<iostream>
#include<queue>
#include<string>
using namespace std;

int n,m,cnt,f,arr[26],map[26][26];
bool flag[26],vis[26];
string str;

//返回排序成功时内部的元素个数
int TuoPu()
{
int i,j,count=0;
queue<int> Q;
memset(arr,0,sizeof(arr));
memset(flag,0,sizeof(flag));
memset(vis,0,sizeof(vis));
str="";
cnt=0,f=0;
for(i=0;i<26;i++)
for(j=0;j<26;j++)
if(map[i][j])
{
vis[i]=1;vis[j]=1;
arr[j]++;
}
//记录节点的总数
for(i=0;i<26;i++)
if(vis[i])
count++;
//入度为0的入栈
for(i=0;i<26;i++)
if(!arr[i]&&vis[i])
{
flag[i]=1;
Q.push(i);
}
//存在环
if(Q.size()==0)
return -1;
//存在多个入度为0的情况,无法判断
else if(Q.size()>1)
f=1;
//队列内部拓扑判断
while(!Q.empty())
{
int tmp=Q.front();
cnt++;
Q.pop();
str+=tmp+'A';
for(i=0;i<26;i++)
{
if(!flag[i]&&map[tmp][i]&&vis[i])
arr[i]--;
}
int t=0;
for(i=0;i<26;i++)
{
if(!flag[i]&&!arr[i]&&vis[i])
{
flag[i]=1;
Q.push(i);
t++;
}
}
if(Q.size()==0&&cnt!=count)
return -1;
if(t>1)
f=1;
}
return cnt;
}

int main()
{
char ch1,op,ch2;
int i,mark,pos,tmp;
while(cin>>n>>m)
{
if(n==0&&m==0)
break;
memset(map,0,sizeof(map));
mark=0;
for(i=0;i<m;i++)
{
cin>>ch1>>op>>ch2;
map[ch1-'A'][ch2-'A']=1;
//没有找到且没有出错
if(mark==0)
{
tmp=TuoPu();
if(tmp==-1)
{
pos=i+1;
mark=1;
}
else if(tmp==-2)
continue;
else if(tmp==n&&f==0)
{
pos=i+1;
mark=2;
}
}
}
if(mark==2&&f==0)
cout<<"Sorted sequence determined after "<<pos<<" relations: "<<str<<"."<<endl;
else if(mark==1)
cout<<"Inconsistency found after "<<pos<<" relations."<<endl;
else
cout<<"Sorted sequence cannot be determined."<<endl;
}
return 0;
}

转载于:https://www.cnblogs.com/yongze103/archive/2010/08/09/1796070.html

Sorting It All Out--POJ 1094相关推荐

  1. Poj 1094 拓扑排序Kahn

    Poj 1094 拓扑排序Kahn Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4133 ...

  2. POJ 1094拓补排序

    POJ 1094拓补排序问题,需要加一些判断 #include <cstdio> #include <queue> #include <vector> #inclu ...

  3. POJ 1094 Sorting It All Out (拓扑排序)

    题意:给你一些大写字母间的偏序关系,然后让你判断能否唯一确定它们之间的关系,或者所给关系是矛盾的,或者到最后也不能确定它们之间的关系.   由DAG图节点的偏序关系确定节点的排序可以由拓扑排序求出.而 ...

  4. POJ - 1094 Sorting It All Out(拓扑排序)

    https://vjudge.net/problem/POJ-1094 题意 对于N个大写字母,给定它们的一些关系,要求判断出经过多少个关系之后可以确定它们的排序或者排序存在冲突,或者所有的偏序关系用 ...

  5. POJ - 1094 Sorting It All Out(拓扑排序+floyd传递闭包)

    题目链接:点击查看 题目大意:给出N个点以及M个比较关系,问在第几个数字可以确定出唯一的序列,或者判断出矛盾的序列,或者最后也无法确定出一个唯一的序列 题目分析:关于这个题目可以直接分类讨论,可以直接 ...

  6. poj 1094 Sorting It All Out(拓扑排序)

    2018-3-25 拓扑排序的题目,需要注意的是,这里是边输入边判断的,之前有一组数据一直不知道为什么不过: A>F B>D C>E F>D D>E E>F 其实当 ...

  7. POJ 1094 拓扑排序

    题意大坑,建议先看Discuss-- 否则代码写得就像以下的一团糟.... 其实并不难,拓扑排序+乱搞就可以AC. // by SiriusRen #include <cstdio> #i ...

  8. POJ 图论---1_Uriel's Corner Uriel's Coding Learning Cubing Zone

    原文地址: http://www.cppblog.com/Uriel/articles/121814.html 内容: 刚开始学图论不久,这个是自己做过的一点图论水题,不一定全,有什么错误或者大家有其 ...

  9. 0x61.图论 - 最短路

    目录 单源最短路径 一.Dijkstra算法 1.常用的优先队列优化 2.更优的线段树优化 3.最强的zkw线段树优化 二.SPFA算法 三.分层图最短路 1.(二维分层图)AcWing 340. 通 ...

  10. tfrcw函数用法_open函数

    open函数用来打开文件 其语法为:open(name[, mode[, buffering]]) open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象.模式(mode)和缓冲(buff ...

最新文章

  1. 利用文件锁控制程序的执行
  2. .NET之全平台一体化的体验
  3. WGS84经纬度坐标转北京54高斯投影地方坐标流程
  4. SQL Server 中常见的十张系统表
  5. 专访赵加雨:WebRTC在网易云信的落地
  6. centos 管道符取第一行_CentOS 7 文件操作命令
  7. SAP成都研究院C4C光明左使:SAP Cloud for Customer 使用SAP UI5的独特之处
  8. Oracle tips
  9. Linux CentOS 7.2 安装 Tomcat 8 服务器
  10. 589. N叉树的前序遍历
  11. 51单片机的篮球计分器设计
  12. 如何用cocos2d-x来开发简单的Uphone游戏:(五) 打包和发布
  13. 利用css制作二级下拉菜单
  14. 查找表字段-事务码 AUT10
  15. c语言数组文曲星猜数游戏编程,文曲星“猜数字”游戏的计算机模拟 —— 算法分析与实现...
  16. 虚拟信用卡绑定paypal验证的教程
  17. discuzx update sitekey.php,Discuz如何清除应用中心密码附加工具
  18. 用Python学《微积分B》(定积分)
  19. 安徽大学计算机学院 张磊,安徽大学张磊在光学自由曲面高精度干涉检测领域取得进展...
  20. Deep Learning based Recommender System:A Survey and New Perspectives

热门文章

  1. 1分钟、2束光,3D打印出一座“柏林地标”,精度高于发丝 | Nature
  2. Android EventBus使用(不含源码解析)
  3. F5 bigip.conf配置问题
  4. java封装Mongodb3.2.1工具类
  5. 浅谈压缩感知(二十一):压缩感知重构算法之正交匹配追踪(OMP)
  6. Web3DGame之路,Babylonjs 和TypeScript学习笔记(二)
  7. 老外谈设计: 2015年WEB设计趋势
  8. 使用极光推送实现分组发送和服务端集成
  9. [原创]ExtAspNet秘密花园(十六) — 表格之排序与分页
  10. 磁盘阵列RAID的分类有哪些?