博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pku 1094 Sorting It All Out ——拓扑排序
阅读量:4575 次
发布时间:2019-06-08

本文共 2271 字,大约阅读时间需要 7 分钟。

题意相当的坑爹,才开始我的步骤是:

1 判断是否有环,如果存在环,就输出Inconsistency found after 2 relations.不能确定该序列大小

2 如果不存在环,然后判断是否能够判断出唯一的该序列,每次去入读为0的点时,一定会有一个,而且最终取完。。。

3 然后判断。

可是Discuss里面的数据就是不过。。。于是看了看讨论。

原来,只要在出现环之前,能够判断出该序列的顺序就输出顺序,后面的就只输入不处理了(不管了)。。。

还有判断环的优先级要高于序列唯一性判断的优先级。。。

这样的话要每输入一条边,就要进行一次拓扑排序,然后判断是否能够确定该唯一的序列,以及是否存在环。。。如果输入完毕,两个都未确定,则表明,序列无法确定。。

View Code
#include 
#include
#include
#define maxn 30 using namespace std; int map[maxn][maxn],ind[maxn]; char as[maxn]; int n,m; int topor() {
int i,j,k; bool flag; memset(ind,0,sizeof(ind)); for (i = 1; i <= n; ++i) {
for (j = 1; j <= n; ++j) {
if (map[i][j]) ind[j]++; } } flag = false;//判断是否存在多个入度为0的点 memset(as,0,sizeof(as)); for (k = 0; k < n; ++k) {
i = 0; for (j = 1; j <= n; ++j) {
if (ind[j] == 0) {
if (i == 0)//判断入度为0的点就一个 i = j; else//出现多个 flag = true; } } if (i == 0) return 1;//没有入度为0的点 as[k] = i + 'A' - 1; ind[i] = -1; for (j = 1; j <= n; ++j) {
if (map[i][j]) ind[j]--; } } if (!flag) return 0; else return 2; } int main() {
//freopen("d.txt","r",stdin); int i,j; char s[10]; while (cin>>n>>m) {
if (!n && !m) break; for (i = 0; i <= n; ++i) {
for (j = 0; j <= n; ++j) {
map[i][j] = 0; } } bool flag = false;//判断是否可以确定唯一序列 for (i = 1; i <= m; ++i) {
scanf("%s",s); if (flag) continue;//如果确定了序列顺序或者存在环后面的就不管了 int a = s[0] - 'A' + 1; int b = s[2] - 'A' + 1; map[a][b] = 1; int mark = topor(); if (mark == 0) {
printf("Sorted sequence determined after %d relations: %s.\n",i,as); flag = true; } else if (mark == 1) {
printf("Inconsistency found after %d relations.\n",i); flag = true; } } //否则 if (!flag) {
printf("Sorted sequence cannot be determined.\n"); } } return 0; }

 

转载于:https://www.cnblogs.com/E-star/archive/2012/03/11/2390357.html

你可能感兴趣的文章
2013春节出游兴“专机游”
查看>>
mysql 创建用户名及密码
查看>>
五 搭建kafka集群
查看>>
Linux 内核即插即用规范
查看>>
【规范】javascript 变量命名规则
查看>>
数据适配 DataAdapter对象
查看>>
有序列表ol和定义列表dl,dt,dd
查看>>
联想小新Air 15 安装黑苹果macOS High Sierra 10.13.6过程
查看>>
公共POI导出Excel方法–java
查看>>
次短路——Dijkstra
查看>>
C++ compile issue
查看>>
安卓中的shape
查看>>
站立会议总结08
查看>>
C++ stat判断路径是文件还是目录
查看>>
动态代理
查看>>
ie11下,接受postmessage返回的信息
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第1节 继承_13-Java继承的三个特点...
查看>>
中小企业实施OA的意义
查看>>
es6 数组
查看>>
JS判断是否在微信浏览器打开
查看>>