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 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...
随机推荐
- android设置view透明度的效果
android设置view透明度的效果 推荐textView.setBackgroundColor(Color.TRANSPARENT); 第一种方法:在xml文件中设置背景颜色. andro ...
- cocos2d_android开发简单游戏
1)游戏图层设计: public class WellcomeLayer extends CCLayer { public WellcomeLayer() { this.setIsTouchEnabl ...
- Android为ListView的Item设置不同的布局
MainActivity如下: package cc.testlistview; import java.util.ArrayList; import java.util.HashMap; impor ...
- Java 日志缓存机制的实现--转载
概述 日志技术为产品的质量和服务提供了重要的支撑.JDK 在 1.4 版本以后加入了日志机制,为 Java 开发人员提供了便利.但这种日志机制是基于静态日志级别的,也就是在程序运行前就需设定下来要打印 ...
- Java基础知识强化之集合框架笔记08:Collection集合自定义对象并遍历案例(使用迭代器)
1. Collection集合自定义对象并遍历案例(使用迭代器) (1)首先定义一个Student.java,如下: package com.himi.collectionIterator; publ ...
- python栈的实现(入栈,出栈)
#coding=utf-8 class Stack(): def __init__(st,size):#栈的初始化 st.stack=[]; st.size=size; st.top=-1 def p ...
- PHP微信公众号 access_token缓存
PHP创建access_token.json文件,将access_token 和 生成时间expires 保存在其中, {"access_token":"xxxx&quo ...
- Canvas transform浅析
没有前奏,直接进入主题 transform调用方法: ctx.transform(a,b,c,d,e,f);如下 var ctx = document.getElementById("myC ...
- 移动页面缩放方法之(二)控制HTML
<!DOCTYPE HTML> <html lang="zh-cn"> <head> <meta http-equiv="Con ...
- 网页调用外部APP
<activity android:name=".MainActivity" android:label="@string/app_name"> & ...