来源:点击打开链接

不知道怎么回事,wa了整整一天。。在绝望的时候AC了。

重点是分步处理和三种情况的判断。

1、判断是否成环,成环了直接输出错误信息。

2、然后一条边一条边的加入,进行拓扑排序,如果出度为0的点多于两个,继续判断之,如果到所有点都加入了但仍然没有判断出来,输出第三种情况。

3、以上两种情况都不存在,输出拓扑排序的路径信息。

#include <iostream>
#include <cstring>
#include <string>
using namespace std; int mat[105][105];
int ans[105];
int indegree[105];
int length,rela,tflag,loopflag; int TopoLogic()
{
int loopcount=0;//0入度数统计
int entrypoint=0;//第几个检测到0入度,加入队列
int t=0;
int flag=1; memset(indegree,0,sizeof(indegree)); for (int a=0;a<length;a++) //求目前图的入度
{
for (int b=0;b<length;b++)
{
if (mat[a][b])
indegree[b]++;
}
}
for (int i=0;i<length;i++)
{
loopcount=0;
for (int j=0;j<length;j++)
{
if (indegree[j]==0)
{
loopcount++;
entrypoint=j;
}
}
if (loopcount>1)
flag=-1; //出现多种情况,不好说
if (loopcount==0 && loopcount!=length)//第二个条件很容易忘
return 0; ans[t++]=entrypoint;
indegree[entrypoint]=-1;//去点
for (int p=0;p<length;p++)
{
if (mat[entrypoint][p]==1)
indegree[p]--;
} }
return flag; } int main()
{ while (cin>>length>>rela)
{
if (length==0 && rela==0)
break;
memset(mat,0,sizeof(mat));
memset(indegree,0,sizeof(indegree)); tflag=0;//队列标志
string tar; for (int t=1;t<=rela;t++)
{
int resulter;
cin>>tar;
mat[tar[0]-'A'][tar[2]-'A']=1;
memset(ans,0,sizeof(ans));
if (tflag==0)
{
resulter=TopoLogic();
//cout<<resulter<<endl;
} if (resulter==1 && tflag==0)
{
cout<<"Sorted sequence determined after "<<t<<" relations: ";
for (int a=0;a<length;a++)
cout<<(char)(ans[a]+'A');
cout<<"."<<endl;
tflag=1;
} if(resulter==0 && tflag==0)
{
cout<<"Inconsistency found after "<<t<<" relations."<<endl;
tflag=1;
} }
if(tflag==0)
cout<<"Sorted sequence cannot be determined."<<endl; //全部判断完再输出矛盾!! }
return 0;
}

【改了一天的拓扑排序】POJ 1094——Sorting It All Out的更多相关文章

  1. 拓扑排序 POJ 1094 Sorting It All Out

    题意:给定N个字和M行他们之间的关系,要求输出他们的拓扑排序.此题采用边输入边检测的方式,如果发现环,就结束并输出当前行号:如果读取到当前行时,可以确定拓扑序列就输出,不管后面的输入(可能包含环路): ...

  2. 拓扑排序 POJ 1049 Sorting It All Out

    题目传送门 /* 拓扑排序裸题:有三种情况: 1. 输入时发现与之前的矛盾,Inconsistency 2. 拓扑排序后,没有n个点(先判断cnt,即使一些点没有边连通,也应该是n,此时错误是有环): ...

  3. ACM: poj 1094 Sorting It All Out - 拓扑排序

    poj 1094 Sorting It All Out Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & ...

  4. 拓扑排序(Topological Sorting)

    一.什么是拓扑排序 在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列.且该序列必须满足下面两个 ...

  5. 拓扑排序 POJ 2367

    今天网易的笔试,妹的,算法题没能A掉,虽然按照思路写了出来,但是尼玛好歹给个测试用例的格式呀,吐槽一下网易的笔试出的太烂了. 就一道算法题,比较石子重量,个人以为解法应该是拓扑排序. 就去POJ找了道 ...

  6. [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 ...

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

    http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  8. 图论之拓扑排序 poj 2367 Genealogical tree

    题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...

  9. POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)

    题意:给出n个字符,m对关系,让你输出三种情况:     1.若到第k行时,能判断出唯一的拓扑序列,则输出:         Sorted sequence determined after k re ...

随机推荐

  1. [置顶] Android自定义控件大全

    1,自定义Edittext, TextView,带底线的Edittext, TextView 2.自定义圆形ImageView,圆角ImageView 3,下拉刷新LinearLayout 4,多点触 ...

  2. 最新Cocos2d-x3.2开发环境搭建(windows环境下)

    原文地址:http://cache.baiducontent.com/c?m=9d78d513d9921cfe05ac837f7d16c067690297634d9dc7150ed58449e3735 ...

  3. vc根据域名获取IP地址 gethostbyname()函数

    以下是VC Socket初始化时用到的两个函数 一.WSAStartup函数                int WSAStartup                       (         ...

  4. LoadRunner脚本增强

    1.检查点 web_find() 和web_reg_find() 2.Block技术 如果对不同的事物进行不同次数的循环该怎么处理?默认情况下LoadRunner对所有的事物都是统一执行的,即虽然有多 ...

  5. Action的返回值类型总结

    Action的返回值 MVC 中的 ActionResult是其他所有Action返回类型的基类,下面是我总结的返回类型,以相应的帮助方法: 下面是这些方法使用的更详细的例子 一.返回View     ...

  6. c语言,const被绕过

    注意在现在的gcc中, const可能会被用指针绕过. linux: #include "stdlib.h" #include <stdio.h> int t1() { ...

  7. BZOJ 3545: [ONTAK2010]Peaks( BST + 启发式合并 + 并查集 )

    这道题很好想, 离线, 按询问的x排序从小到大, 然后用并查集维护连通性, 用平衡树维护连通块的山的权值, 合并就用启发式合并.时间复杂度的话, 排序是O(mlogm + qlogq), 启发式合并是 ...

  8. [REST Jersey] @QueryParam Demo

    This demo sourced from the jersey tutor. https://jersey.java.net/documentation/latest/jaxrs-resource ...

  9. [Cocos2d-x开发问题-3] cocos2dx动画Animation介绍

    Cocos2d-x为了减少开发难度,对于动画的实现採用的帧动画的方案.这也就是说Cocos2d-x中的动画是帧动画. 帧动画的原理相信大家都不陌生,就是多张图片循环播放以实现动画的效果. 一个简单的动 ...

  10. paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制

    源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...