POJSorting It All Out (拓扑)
题目链接。
题目大意:
给定一定的数量的小于关系:
1.如果发现环,输出从前几次就可以确定出现环
2.如果能够确定唯一序列,输出。
3.如果通过全部关系,还不能确定序列,则输出不能确定.
分析:
个人感觉难点在于判环上。
1.如果每次都只能找到1个入度为0的点,并能确定序列,则该序列即为答案。
2.如果每次查找时,发现两个及其以上的入度为0的点,则表明一定不能确定唯一序列(即存在环或者是不能确定)。如果可以确定一个任意序列,即表明还需要更多关系。如果继续查找下去,找不到入度为0的点,则存在环。
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue> using namespace std; const int maxn = ;
const int INF = (<<); int n, m, indeg[maxn], S[maxn], top, mark;
bool G[maxn][maxn], v[maxn]; int toposort()
{
int deg[maxn], cn;
bool vis[maxn], flag = true; top = ;
memcpy(deg, indeg, sizeof(deg));
memset(vis, , sizeof(vis)); for(int i=; i<n; i++)
{
cn = ; for(int k=; k<n; k++) if(deg[k] == ) cn++; //计算入度为0的点的个数 if(cn > ) flag = false; //出现环或者不能确定唯一序列
else if(cn == ) break; //出现环 int k;
for(k=; k<n; k++) if(deg[k] == ) break;
S[top++] = k;
deg[k]--;
for(int j=; j<n; j++) if(G[k][j]) deg[j]--;
} if(cn == ) return -; //环
if(mark < n || !flag) return ; //不能判断
else return ; //拓扑成功
} int main()
{
char c1, c2;
int flag, num;
// freopen("my.txt", "r", stdin);
while(scanf("%d %d", &n, &m) == )
{
if(n == && m == ) break; memset(indeg, , sizeof(indeg));
memset(G, false, sizeof(G));
memset(v, false, sizeof(v)); flag = ;
mark = ; for(int i=; i<m; i++)
{
getchar();
scanf("%c<%c", &c1, &c2); if(!G[c1-'A'][c2-'A']) {
G[c1-'A'][c2-'A'] = true;
indeg[c2-'A']++;
} //mark用来标记当前已经出现的字母的个数
if(!v[c1-'A']) { v[c1-'A'] = true; mark++; }
if(!v[c2-'A']) { v[c2-'A'] = true; mark++; } int res;
if(flag == ) {
res = toposort(); if(res == -) {
flag = -;
num = i;
} else if(res == ) {
num = i;
flag = ;
}
}
} if(flag == ) {
printf("Sorted sequence determined after %d relations: ", num+);
for(int i=; i<top; i++)
{
putchar(S[i]+'A');
}
printf(".\n");
}
else if(flag == ) printf("Sorted sequence cannot be determined.\n");
else printf("Inconsistency found after %d relations.\n", num+);
} return ;
}
POJSorting It All Out (拓扑)的更多相关文章
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 有向无环图的应用—AOV网 和 拓扑排序
有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...
- 通过HTML5的Drag and Drop生成拓扑图片Base64信息
HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 318[Submit][Status][Di ...
- BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...
- 图——拓扑排序(uva10305)
John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...
- T型及Fly_by拓扑之应用总结
前面的文章有分别介绍过T型拓扑及Fly_by拓扑结构,这两种拓扑结构应用最多的应该是在DDR3里面,说到这里,小编又想开始聊聊DDR3的设计了,我想很多人都比较有兴趣. 因为DDR3的设计还是比较复杂 ...
- Java排序算法——拓扑排序
package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...
- poj 3687(拓扑排序)
http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...
随机推荐
- [Angular 2] ng-model and ng-for with Select and Option elements
You can use Select and Option elements in combination with ng-for and ng-model to create mini-forms ...
- Qt 学习之路:视图选择 (QItemSelectionModel)
选择是视图中常用的一个操作.在列表.树或者表格中,通过鼠标点击可以选中某一项,被选中项会变成高亮或者反色.在 Qt 中,选择也是使用了一种模型.在 model/view 架构中,这种选择模型提供了一种 ...
- Linux shell入门基础(五)
五.bash运算及启动脚本 01.使用bash的命令历史 #history …… #set(显示所有的变量) | grep HIS HISTFILE=/root/.bash_history HISTF ...
- 哥的第一个Jquery程序
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...
- Set Keep-Alive Values---C到C#代码的转换
一.什么是Keep-Alive模式? 我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HT ...
- Ajax数据格式,html,xml,json
1. 2. 3. 4. 5. 6. 7. 8. 9.
- Objective-C学习篇06—NSString与NSMutableString
NSString OC提供了定义字符串对象的方法,也就是将想要表达的字符串用一对双引号引起来,并在开头加上@.@是OC中的指令符,它告诉编译器@以后的内容为OC中的语法.比如@”Harbingwang ...
- windows 7下安装python+mongodb
1. python安装 下载:http://python.org/download/ 直接双击安装,安装完后将路径加入系统环境变量path中. 2. mongodb安装 下载:http://www.m ...
- JavaScript设计模式之代理模式
一.代理模式概念 代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问.代理模式使得代理对象控制具体对象的引用.代理几乎可 ...
- Highcharts中文网
官网地址: http://www.hcharts.cn/ http://www.hcharts.cn/p/highchartTable.php 名词解释 英文名 中文名 描述 更多 lang 语言 ...