拓扑排序--输出
来源:互联网 发布:fifa online3数据库cc 编辑:程序博客网 时间:2024/06/05 15:57
拓扑排序
代码如下:
#include <stdio.h>#include <vector>#include <queue>#include <algorithm>using namespace std;#define N 501vector<int> edge[N];int inDegree[N]; // 保存各点入度queue<int> out; // 用于输出queue<int> q;int tmp[N];int main(){int n, m;while (scanf("%d%d", &n, &m) != EOF && n != 0){for (int i = 1; i <= n; i++){edge[i].clear();inDegree[i] = 0;}while (!q.empty()) q.pop();while (!out.empty()) out.pop();while (m--){int a, b;scanf("%d%d", &a, &b);inDegree[b]++;edge[a].push_back(b);}for (int i = 1; i <= n; i++)if (0 == inDegree[i]) q.push(i); // 入度为0的压入队列while (!q.empty()){int size = q.size();int k = 0;while (!q.empty()){tmp[k++] = q.front();q.pop();}sort(tmp, tmp + size); // 将队列中的元素弹出,排好序再压入for (int i = 0; i < size; i++)q.push(tmp[i]);int newp = q.front();out.push(newp);q.pop();for (int i = 0; i < edge[newp].size(); i++) // 修改各点入度if (0 == --inDegree[edge[newp][i]]) q.push(edge[newp][i]); // 入度为0的压入队列}for (int i = 0; i < n; i++){if (i != n - 1) printf("%d ", out.front());else printf("%d", out.front());out.pop();}printf("\n");}return 0;}
0 0
- 拓扑排序--输出
- 拓扑排序输出全部路径
- poj 3683 2-SAT 拓扑排序输出
- UVa 872 - Ordering 输出全拓扑排序
- hdu 4857 逆向拓扑排序+逆向输出
- hdu 4857 逆向拓扑排序+反向输出
- poj2367 Genealogical tree(拓扑排序:输出方案)
- POJ 3687--Labeling Balls【拓扑排序 && 逆序拓扑 && 输出在拓扑排序中的位置】
- hdu 1285 基于入度数排序输出的拓扑排序
- UVa 872 Ordering(拓扑排序输出全部路径)
- poj 3683 2-sat建图+拓扑排序输出结果
- POJ 1270 Following Orders(拓扑排序:输出所有可能)
- POJ 2367 Genealogical tree(拓扑排序:输出方案)
- uva 124 Following Orders 拓扑排序输出全部序列
- poj 3648 Wedding(2-sat--拓扑排序输出可行解)
- hdoj 4857 逃生 【拓扑排序 输出字典序最小解】
- poj 3648 wedding(2-sat 拓扑排序输出方案)
- POJ 1270 Following Orders(拓扑排序:输出所有可能)
- Java并发编程:深入剖析ThreadLocal
- UVA10081 Tight Words(dp)
- JAVA 多线程--了解线程
- 仿射变换
- Android-Universal-Image-Loader最新框架解析
- 拓扑排序--输出
- VS2010bug 当生成或重新生成时,出现 不能复制文件(从obj\debug到bin\debug),文件正在被另一个进程使用的错误解决办法
- 动画
- ace 之 ACE_Message_Block
- 不养生反伤身的喝汤误区,看看你中了多少!!
- GCD
- 《高级语言程序设计实训》那些事
- 我的成长(四)---看书
- java.util.ResourceBundle使用详解(java国际化)