Ordering Tasks-简单的拓扑排序
来源:互联网 发布:微信js sdk 编辑:程序博客网 时间:2024/06/05 18:18
原题在这里^_^
题意:通过输入m条两任务间的优先顺序,输出一个可能的任务顺序;
思路;拓扑排序,就是建立一个图,每次选择入度为零的顶点,将与之关联的点的入度减一。
拓扑的关键两步骤:
1.入度为零的顶点输出;
2.将该点连得边去掉。(即与之关联点的入度减一)
#include<iostream>#include<cstring>#include<stack>using namespace std;const int maxn=101;int Adj[maxn][maxn], inDegree[maxn], n, m;stack<int> stk;void CreatGraph(){memset(Adj, 0, sizeof(Adj));memset(inDegree, 0, sizeof(inDegree));int u, v;while(m--){cin>>u>>v;Adj[u][v]=1;inDegree[v]++;}for(int i=1; i<=n; i++)//将入度为零的点入栈。if(inDegree[i]==0)stk.push(i);return;}void tpSort(){int order[n];//输出的顺序int it, cnt=0;while(stk.size())//栈不为空就说明还有入度为零的点未输出。{it=stk.top();stk.pop();for(int i=1; i<=n; i++){if(Adj[it][i] && inDegree[i])inDegree[i]--;if(Adj[it][i] && !inDegree[i])//入度为零则进栈。stk.push(i);}order[cnt++]=it;//将该点存入序列。}for(int i=0; i<n-1; i++)cout<<order[i]<<" ";cout<<order[n-1]<<endl;return;}int main(){while(cin>>n>>m && n+m){CreatGraph();tpSort();}return 0;}
阅读全文
1 0
- Ordering Tasks-简单的拓扑排序
- UVA 10305 - Ordering Tasks 很简单的拓扑排序题目。
- Ordering Tasks (拓扑排序)
- Ordering Tasks(拓扑排序)
- 10305 - Ordering Tasks(****)拓扑排序
- 10305 - Ordering Tasks//拓扑排序
- Ordering Tasks(拓扑排序)
- uva10304 Ordering-Tasks 拓扑排序
- UVA10305 Ordering Tasks 拓扑排序
- sicily Ordering Tasks 拓扑排序
- Uva10305 Ordering Tasks(拓扑排序)
- UVA10305 Ordering Tasks(拓扑排序)
- UVA 10305 - Ordering Tasks 很简单的拓扑排序题目。(简化了一下的方法)
- 【uva-10305】Ordering Tasks (拓扑排序中最简单的一道
- UVa 10305 - Ordering Tasks , 经典的拓扑排序
- uva 10305 Ordering Tasks(拓扑排序)
- uva 10305 Ordering Tasks (拓扑排序)
- UVa 10305 Ordering Tasks (拓扑排序模板)
- 2分钟治好你的拖拖拖拖拖拖拖拖拖延症
- ant匹配url
- 架构师日记——Nginx反向代理、动静分离和负载均衡
- 泛型
- jQuery基础
- Ordering Tasks-简单的拓扑排序
- MMORPG的一份Unity手游性能蓝皮书
- MFC中使用CWebBrowser2
- 创建线程的三种方式总结
- eclipse从Git获取项目更新
- python实现str时间和系统时间的比较
- FileInputStream介绍和对文件操作的具体用法
- android音频系统之AudioTrack的使用
- Catch That Cow (BFS)