View Code

/*Name: 拓扑排序,多次拓扑Copyright: Author: Try86Date: 16/04/12 21:36Description:
*/#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>using namespace std;const int N = 27;bool ch[N];
char ans[N]; //存拓扑序
int inDeg[N]; //入度数
struct node {int v;node *next;node(int vv, node *p) {v = vv;next = p;}
};struct graph {node *link;
}G[N];void init(int n) {for (int i=0; i<n; ++i) G[i].link = NULL;return ;
} void buildG(int u, int v) {node *p = new node(v, G[u].link);G[u].link = p;return ;
}int topoSort(int n, int s) {int temp[27], cs, j, k = 0;for (int i=0; i<n; ++i) temp[i] = inDeg[i];//当前各点入度数 bool flag = true;while (s--) {cs = 0;//统计入度为0的顶点个数 for (int i=0; i<n; ++i) {if (temp[i] == 0) j = i, ++cs;}if (cs >= 1) {if (cs > 1) flag = false;//入度为0的顶点个数大于1,拓扑序有多个,不能比较拓扑序的关系 for (node *p=G[j].link; p; p=p->next) --temp[p->v];ans[k++] = j + 'A';temp[j] = -1;ans[k] = '\0';}else return -1;//入度为0的个数为0,存在回路,不能形成拓扑序
    }if (flag) return k;return 0;
}void del(node *p) {if (!p) return ;del(p->next);delete p;return ;
}int main() {int n, m;char str[4];while (scanf("%d%d", &n, &m) && n+m) {init(n);memset(ch, false, sizeof(ch));memset(inDeg, 0, sizeof(inDeg));int  junge, counts, k;junge = counts = 0;for (int i=0; i<m; ++i) {scanf ("%s", str);if (junge != -1) {//junge!=-1,则当前输入下,不存在回路int u = str[0] - 'A';int v = str[2] - 'A';buildG(u, v);++inDeg[v];if (!ch[u]) ++counts, ch[u] = true;if (!ch[v]) ++counts, ch[v] = true;}if (junge == 0) {//junge==0,则当前输入下,不存在回路,也不存在孤立点,图连通,需继续拓扑 int t = topoSort(n, counts);if (t == -1) junge = -1, k = i + 1;else if (t == n) junge = 1, k = i + 1;}}if (junge == -1) printf ("Inconsistency found after %d relations.\n", k);else if (junge == 0) printf ("Sorted sequence cannot be determined.\n");else printf ("Sorted sequence determined after %d relations: %s.\n", k, ans); for (int i=0; i<n; ++i) del(G[i].link);}return 0;
}

转载于:https://www.cnblogs.com/try86/archive/2012/04/16/2452754.html

pku 1094(拓扑排序,多次拓扑)相关推荐

  1. 拓扑排序及逆拓扑排序

    拓扑排序其实就是对有向无环图的顶点的一种排序,每个顶点出现且只出现一次. 对一个AOV网进行拓扑排序的方法: 1.从AOV网中选择一个入度为0的顶点并输出: 2.从网中删除该顶点和所有以它为起点的有向 ...

  2. python 拓扑排序 dfs bfs_拓扑排序的DFS和BFS

    博主以前有一个疑问,DFS和BFS各自的适用范围是?我想你今天看了这篇文章之后会有一个判断! BFS 数据结构与算法分析:c语言描述(p217) 已经存在一个Indgree入度数组(indgree[v ...

  3. 拓扑排序与逆拓扑排序

  4. aov建立Java模拟,数据结构之---C语言实现拓扑排序AOV图

    //有向图的拓扑排序 //杨鑫 #include #include #include #define MAX_NAME 3 #define MAX_VERTEX_NUM 20 typedef int ...

  5. 拓扑排序之变量序列代码

    /* Name:  Copyright:  Author:  Date: 17-11-14 21:02 Description: 拓扑排序之变量序列  如果有n个变量(1<=n<=26,变 ...

  6. hdu 4109 Instrction Arrangement 拓扑排序 关键路径

    这个算是关键路径的模版题目了,解这个题目之前,首先说下关键路径的含义,传送门(度娘),个人的见解是,关键路径就是木桶的短板问题,比如有一群人约好去某个地方,大家从同一个地方同一时间开始出发,有些人选择 ...

  7. 【算法】图(一)拓扑排序的实现 图的邻接表算法 判断是否图G中存在环

    文章目录 用list来表示图,判断是否存在环 邻接表实现拓扑排序 用DFS(邻接矩阵) 来实现拓扑排序. 判断无向图顶点是否全部连通 判断图G中从顶点u到v是否存在简单路径 输出图G中从顶点u到v的所 ...

  8. 数据结构-----图的拓扑排序和关键路径算法

    部分图片取自:http://www.cnblogs.com/navorse/articles/1893863.html 在介绍拓扑排序和关键路径之前,先引入AOE网络的概念: 该图为一个AOE网,顶点 ...

  9. 从LeetCode 210. Course Schedule II 了解拓扑排序

    问题简述 给定n节课,每节课按0~n-1编号. 在修某些课的时候需要有其它课的基础,必须先上先修课.现在用pair的形式来表示要先修的课,比如 [ [0,1], [1,2] ] 就表示在修课程1之前必 ...

  10. 拓扑排序和关键路径课程设计

    目录 1.    设计任务书... 3 1.1设计任务... 3 1.2程序功能... 3 1.3运行环境... 3 2.    本组课题... 3 2.1课题... 3 2.2本人任务... 3 3 ...

最新文章

  1. python基础教程第三版和第二版选哪个-python基础教程 2版和3版哪个适合新手?!...
  2. python getmenu不到菜单句柄,从弹出菜单win32 api Python中选择项目
  3. 汇编语言(二十三)之求一个数的补数
  4. 手机web网页制作的认识(有关meta标签)
  5. JavaScript-概述
  6. U811.1接口EAI系列之二-BOM构成-委外BOM构成--VB语言
  7. Quartus17下使用Modelsim10进行仿真
  8. HDU 5773 The All-purpose Zero(O(nlgn)求LIS)
  9. java post上传进度,OkHttp实现文件上传进度
  10. 计算机 术语库 excel,Trados直接用Excel做术语库
  11. java复习即基础知识点 思维导图
  12. 洛谷P1447 [NOI2010]能量采集(容斥)
  13. 问题记录:net::ERR_CERT_DATE_INVALID
  14. 【python实现网络爬虫21】天眼查企业数据获取
  15. dell t320 raid linux,Dell T320服务器阵列卡驱动下载
  16. golang 使用ssl连接smtp发送邮件
  17. panda是删除行_pandas删除包含指定内容的行
  18. Tcp为什么是4次挥手呢?为什么是3次握手,不能是3次挥手呢?
  19. 三五族异质结的自发极化、压电极化及2DEG
  20. Python小例子——BMR计算器

热门文章

  1. 【leetcode】667. Beautiful Arrangement II
  2. 【大话设计模式】——简单工厂模式
  3. MySQL数据库安装和介绍
  4. 玩转shell命令行
  5. VMware中centos6.5 minimal 使用NAT模式联网
  6. [转]在EntityFramework6中执行SQL语句
  7. Android重写View并且自定义属性(二)
  8. Linux系统NFS故障现象
  9. bash编程(一)之运算及比较
  10. 通过发送WM_GETTEXT命令获得EDIT中的信息