【改了一天的拓扑排序】POJ 1094——Sorting It All Out
来源:点击打开链接
不知道怎么回事,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的更多相关文章
- 拓扑排序 POJ 1094 Sorting It All Out
题意:给定N个字和M行他们之间的关系,要求输出他们的拓扑排序.此题采用边输入边检测的方式,如果发现环,就结束并输出当前行号:如果读取到当前行时,可以确定拓扑序列就输出,不管后面的输入(可能包含环路): ...
- 拓扑排序 POJ 1049 Sorting It All Out
题目传送门 /* 拓扑排序裸题:有三种情况: 1. 输入时发现与之前的矛盾,Inconsistency 2. 拓扑排序后,没有n个点(先判断cnt,即使一些点没有边连通,也应该是n,此时错误是有环): ...
- ACM: poj 1094 Sorting It All Out - 拓扑排序
poj 1094 Sorting It All Out Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & ...
- 拓扑排序(Topological Sorting)
一.什么是拓扑排序 在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列.且该序列必须满足下面两个 ...
- 拓扑排序 POJ 2367
今天网易的笔试,妹的,算法题没能A掉,虽然按照思路写了出来,但是尼玛好歹给个测试用例的格式呀,吐槽一下网易的笔试出的太烂了. 就一道算法题,比较石子重量,个人以为解法应该是拓扑排序. 就去POJ找了道 ...
- [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 (拓扑排序)
http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- 图论之拓扑排序 poj 2367 Genealogical tree
题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...
- POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)
题意:给出n个字符,m对关系,让你输出三种情况: 1.若到第k行时,能判断出唯一的拓扑序列,则输出: Sorted sequence determined after k re ...
随机推荐
- windows下以指定用户访问SMB服务器进行读写
需求:最近要开发某系统前端界面,但是该系统是部署在linux服务器上,前端是用php开发,实时调试运行需要linux下系统环境支持, 每次修改都需要手动传到服务器上,尤其是debug阶段,每修改一点就 ...
- 【BZOJ1132】【POI2008】Tro 计算几何 叉积求面积
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- Reverse Words in a String | LeetCode OJ | C++
我的思路:先读取每一个单词,存放到容器中:读取完毕后,将容器中的单词倒序写入输出中. #include<iostream> #include<string> #include& ...
- c# 课堂总结6 --集合与结构体
一.集合 使用时必须添加 System.Collections 集合与数组的区别: 1:数组声明了它容纳的元素的类型,而集合不声明.这是由于集合以object形式来存储它们的元素.初始化时集合无需定义 ...
- Hibernate 多对多映射
package com.entity.manytomany; import java.util.List; import javax.persistence.Entity; import javax. ...
- [转]给Linux系统管理员准备的Nmap命令的29个实用范例+ tsysv 系统服务器管理器
原文链接:http://os.51cto.com/art/201401/428152.htm Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具.Nmap用于在远程机器上探 ...
- JQuery遍历json数组的3种方法
这篇文章主要介绍了JQuery遍历json数组的3种方法,本文分别给出了使用each.for遍历json的方法,其中for又分成两种形式,需要的朋友可以参考下 一.使用each遍历 $(functio ...
- python中文utf8编码后是占3个字符,unicode汉字为2字节
一个中文utf8编码后是占3个字符,所以求长度的函数可以这样写 def str_len(str): try: row_l=len(str) utf8_l=len(str.encode('utf-8') ...
- 香蕉派 BPI-M1+ 双核开源硬件单板计算机
香蕉派 BPI-M1+ 开源硬件开发板 深圳市源创通信技术有限公司公司 http://www.sinovoip.com.cn/cp_view.asp?id=562 产品介绍 Banana PI BPI ...
- 深入理解mysql之BDB系列(1)---BDB相关基础知识
深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富 一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1 ...