紫书章六例题15 给任务排序 UVA 10305(拓扑排序)
来源:互联网 发布:软件层次结构图 编辑:程序博客网 时间:2024/05/29 19:48
题意:给你n个任务,但是这n个任务并不是独立的,意思就是有些任务必须在其他任务完成后才能开始做。法1:将之看为一个有向图,入度为0的入队,出队后,将以出队的这点为起点的边入度减一,然后再将没入队过的且入度为0的点入队。这个方法还可以看有没有有向环,即最后所有点没有全部被遍历到。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <sstream>#include <cmath>#include <queue>#include <vector>#include <queue>using namespace std;int n,m;struct node{ int to,pre;};int head[105];int rd[105];int vis[105];node e[10000];void add(int i,int from,int to){ e[i].to=to;e[i].pre=head[from];head[from]=i;}int main(){ while(scanf("%d %d",&n,&m)!=EOF&&m+n) { memset(head,-1,sizeof(head)); memset(rd,0,sizeof(rd)); memset(vis,0,sizeof(vis)); memset(e,0,sizeof(e)); int h=0; for(int i=0;i<m;i++) { int a,b; scanf("%d %d",&a,&b); add(h,a,b);h++; rd[b]++; } queue<int> q; for(int i=1;i<=n;i++) { if(rd[i]==0) {q.push(i);vis[i]=1;} } int flag=0; while(!q.empty()) { int t=q.front(); q.pop(); if(flag) printf(" "); printf("%d",t); flag=1; for(int i=head[t];i>-1;i=e[i].pre) { node temp=e[i]; if(!vis[temp.to]) rd[temp.to]--; } for(int i=1;i<=n;i++) { if(!vis[i]&&rd[i]==0) {vis[i]=1;q.push(i);} } } printf("\n"); } return 0;}
0 0
- 紫书章六例题15 给任务排序 UVA 10305(拓扑排序)
- 例题6-15 给任务排序 UVA 10305(拓扑排序)
- 例题:给任务排序(UVa 10305)
- 拓扑排序(给任务排序,UVA 10305)
- 例题 6-15 UVA 10305 Ordering Tasks 给任务排序
- 例题6-15 给任务排序(Ordering Tasks, UVa 10305)
- 给任务排序(uva 10305)
- UVA 10305 给任务排序
- UVa 10305 给任务排序
- uva 10305 给任务排序
- 10305UVa给任务排序
- Uva10305给任务排序(拓扑排序 板子题)
- 给任务排序(Ordering Tasks,UVa 10305)
- Uva 10305 拓扑排序
- UVA 10305 拓扑排序
- uva 10305 拓扑排序
- uva 10305 拓扑排序
- uva 10305 拓扑排序
- javascript放在head和body的区别(w3c建议放在head标签中)
- 一个小demo
- Android开发之--标签选择
- AndroidStudio Frameworks detected: Android framework is detected in the project Configure
- webstorm 中使用zencoding
- 紫书章六例题15 给任务排序 UVA 10305(拓扑排序)
- RecyclerView/ScrollView中条目弹出PopupMenu导致RecyclerView自动滚动的问题
- windows10常用快捷键
- my choice
- FWT 模板
- 题目1117:整数奇偶排序
- ZOJ3767-Elevator
- 获取ApplicationContext的方法及手动控制事务提交
- OracleDB的数据库名,实例名,服务名,数据库域名,全局数据库名的简单介绍