拓扑排序
来源:互联网 发布:js invalid date 判断 编辑:程序博客网 时间:2024/06/14 16:57
拓扑排序的实质是从某个集合上的一个偏序,得到该集合上的一个全序集合;
如何进行拓扑排序?下面是解决方法:
(1)在有向图中选一个没有前驱的顶点且输出之;
(2)继而删除该顶点和所有以它为尾的弧;
重复以上两步,直至全部顶点均已输出。
Ps:代码的实现思路亏了室友的帮助,下面是有向图的拓扑排序:
#include <stdio.h>#include <stdlib.h>#include <string.h>const int N = 50;int main(){ //初始化,思路可看上面的文字部分 int map[N][N], visited[N], EnterV[N]; memset(map, 0, sizeof(map)); memset(visited, 0, sizeof(visited)); memset(EnterV, 0, sizeof(EnterV)); int n, m, s, e; scanf("%d %d", &n, &m); for(int i = 0; i < m; i++) { scanf("%d %d", &s, &e); map[s][e] = 1; EnterV[e]++; } //找出入度为0的点并记录下来 int Noenter[N]; int tmp = 0; for(int i = 0; i < n; i++) if(EnterV[i] == 0) { Noenter[tmp++] = i; visited[i] = 1; } for(int i = 0; i < tmp; i++) for(int j = 0; j < n; j++) {// 删除从该顶点出发的全部有向边,更新Noenter[]数组 if(map[Noenter[i]][j]) EnterV[j]--; if(EnterV[j] == 0 && visited[j] == 0) { Noenter[tmp++] = j; visited[j] = 1; } } printf("拓扑排序序列:"); for(int i = 0; i < tmp-1; i++) printf("%d->", Noenter[i]); printf("%d\n", Noenter[tmp-1]); system("pause"); return 0;}
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 【拓扑排序】
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- poj 1083 Moving Tables_dp
- 启动ADT bundle 时出错:A fatal error has been detected by the Java Runtime Environment:
- 邻接表实现的拓扑排序
- USACO Section 1.3 Calf Flac
- 简要说明python的一些基本知识(二)
- 拓扑排序
- 邻接矩阵实现的拓扑排序
- TCP连接建立过程中为什么需要“三次握手”
- here is no Action mapped for namespace [/user] and action name [user!add] associated with context pa
- 通过模块配置apache负载均衡器
- 程序员必知8大排序3大查找(一)
- java 时间格式化
- 胖东来连锁超市发展之道
- 函数式编程扫盲篇