来源:点击打开链接

不知道怎么回事,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. windows下以指定用户访问SMB服务器进行读写

    需求:最近要开发某系统前端界面,但是该系统是部署在linux服务器上,前端是用php开发,实时调试运行需要linux下系统环境支持, 每次修改都需要手动传到服务器上,尤其是debug阶段,每修改一点就 ...

  2. 【BZOJ1132】【POI2008】Tro 计算几何 叉积求面积

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  3. Reverse Words in a String | LeetCode OJ | C++

    我的思路:先读取每一个单词,存放到容器中:读取完毕后,将容器中的单词倒序写入输出中. #include<iostream> #include<string> #include& ...

  4. c# 课堂总结6 --集合与结构体

    一.集合 使用时必须添加 System.Collections 集合与数组的区别: 1:数组声明了它容纳的元素的类型,而集合不声明.这是由于集合以object形式来存储它们的元素.初始化时集合无需定义 ...

  5. Hibernate 多对多映射

    package com.entity.manytomany; import java.util.List; import javax.persistence.Entity; import javax. ...

  6. [转]给Linux系统管理员准备的Nmap命令的29个实用范例+ tsysv 系统服务器管理器

    原文链接:http://os.51cto.com/art/201401/428152.htm Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具.Nmap用于在远程机器上探 ...

  7. JQuery遍历json数组的3种方法

    这篇文章主要介绍了JQuery遍历json数组的3种方法,本文分别给出了使用each.for遍历json的方法,其中for又分成两种形式,需要的朋友可以参考下 一.使用each遍历 $(functio ...

  8. python中文utf8编码后是占3个字符,unicode汉字为2字节

    一个中文utf8编码后是占3个字符,所以求长度的函数可以这样写 def str_len(str): try: row_l=len(str) utf8_l=len(str.encode('utf-8') ...

  9. 香蕉派 BPI-M1+ 双核开源硬件单板计算机

    香蕉派 BPI-M1+ 开源硬件开发板 深圳市源创通信技术有限公司公司 http://www.sinovoip.com.cn/cp_view.asp?id=562 产品介绍 Banana PI BPI ...

  10. 深入理解mysql之BDB系列(1)---BDB相关基础知识

        深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富   一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1 ...