UVA 10305 Ordering Tasks(拓扑排序)
2017-09-08 22:27
477 查看
[题目链接(https://vjudge.net/problem/UVA-10305)
题意
n个变量,(u,v)表示u要在v前面,给出所有的(u,v)关系,询问一个合适的排序方案解决
典型的拓扑排序具体可以看下代码注释
#include<iostream> #include<queue> #include<cstdio> #include<cstring> using namespace std; const int N=110; bool maps ; int degree ,n,m; void init() { for(int i=0;i<=n;i++) { degree[i]=0; for(int j=0;j<=n;j++) { maps[i][j]=false; } } } void input() { int u,v; for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); degree[v]++; maps[u][v]=true; } } void solve() { int s; vector<int> v; //用来存储拓扑排序结果 queue<int> q; for(int i=1;i<=n;i++) { if(degree[i]==0) //入度为0的入队(可能不止一个) q.push(i); } while(!q.empty()) { int s=q.front(); //取出队首元素 q.pop(); v.push_back(s); for(int i=1;i<=n;i++) { int t=i; if(maps[s][t]) { degree[t]--; //删除了s,t的入度减一 if(degree[t]==0) //入度如果为0,入队 q.push(t); } } } printf("%d",v[0]); //注意下输出 for(int i=1;i<v.size();i++) { printf(" %d",v[i]); } puts(""); } int main() { while(1) { scanf("%d%d",&n,&m); if(!n&&!m) break; init(); input(); solve(); } return 0; }
相关文章推荐
- UVa 10305 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(拓扑排序入门)
- UVa--10305 Ordering Tasks(拓扑排序)
- Uva10305 Ordering Tasks 【拓扑排序】【例题6-15】
- UVa 10305 - Ordering Tasks ( 拓扑排序, DFS, DAG )
- 例题6-15 UVa10305 Ordering Tasks(拓扑排序)
- UVa 10305 - Ordering Tasks , 经典的拓扑排序
- UVA10305 Ordering Tasks【DFS】【拓扑排序】
- UVA10305 Ordering Tasks 拓扑排序
- Uva10305 Ordering Tasks(拓扑排序)
- UVa 10305 Ordering Tasks (拓扑排序模板)
- UVA 10305 Ordering Tasks(拓扑排序入门)【刘汝佳算法入门经典例6-15】
- UVa 10305 Ordering Tasks(拓扑排序)
- 【拓扑排序模板题DFS方法】UVA - 10305 Ordering Tasks
- UVA 10305 Ordering Tasks (拓扑排序)