poj2367
来源:互联网 发布:c语言运算符优先级表 编辑:程序博客网 时间:2024/05/01 11:31
原题链接:
题目大意:
Sample Input
5//n–以下输入n行条件,此题共n个点
0
4 5 1 0//输入若干个数,输入的数以0作为结尾,输入的若干数输出 顺序都排在i的后面**i表示第i行
1 0
5 3 0
3 0
Sample Output
2 4 5 3 1//输出符合题意的排序
思路: >o<
裸的拓扑排序 >o<
如果i排在j之后,那么就代表从i到j有一条边 >o<
然后,然后,就排序就好了 >o<
** >o<
首先贴一个比较low的代码
#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn=100+10;bool a[maxn][maxn];//记录i到j是否有边bool vis[maxn];//记录i是否已经放入结果集合 int cont[maxn];//记录i的入度个数 int n;int lis[maxn];//记录拓扑顺序 void topo_sort(){ int k=0; while(k!=-1){ for(int i=1;i<=n;i++){ if(cont[i]==0&&!vis[i]){ lis[++k]=i; vis[i]=true;//将i放入结果集合 for(int j=1;j<=n;j++){ if(a[i][j]){ a[i][j]=false;//将与i相连的边去掉 cont[j]--; } } } } if(k==n) break; } for(int i=1;i<=n;i++) printf("%d ",lis[i]);}int main(){ scanf("%d",&n); memset(a,false,sizeof(a)); memset(vis,false,sizeof(vis)); memset(cont,0,sizeof(cont)); for(int i=1,l;i<=n;i++){ while(scanf("%d",&l)&&l!=0){ a[i][l]=true; cont[l]++; } } topo_sort(); return 0;}
再贴一个用queue优化的代码 >o<
#include<iostream>#include<cstring>#include<cstdio>#include<queue>using namespace std;const int maxn=100+10;struct N{ int to[maxn];}node[maxn];//node[i].to[cnt]=j代表i到j有边int n;int siz[maxn];//记录每个点所连的边个数 int cont[maxn];//记录每个点的入度个数 void topo_sort(){ queue <int> pq; for(int i=1;i<=n;i++){ if(cont[i]==0) pq.push(i);//入度为0的点入队 } while(!pq.empty()){ int l=pq.front();//弹出队首 pq.pop(); printf("%d ",l); for(int j=1;j<=siz[l];j++){ int ll=node[l].to[j];//更新与队首有关的点的入度 cont[ll]--; if(cont[ll]==0) pq.push(ll); } }}int main(){ scanf("%d",&n); int l; memset(cont,0,sizeof(cont)); for(int i=1;i<=n;i++){ int cnt=0; while(scanf("%d",&l)&&l!=0){ node[i].to[++cnt]=l; cont[l]++; } siz[i]=cnt; } topo_sort(); return 0;}
**>o<
**>o<
0 0
- poj2367
- poj2367
- 【POJ2367】
- POJ2367
- POJ2367 Genealogical tree
- poj2367 Genealogical tree
- poj2367 拓扑排序
- POJ2367 拓扑排序入门
- POJ2367--Genealogical tree
- poj2367 Genealogical tree
- poj2367 Genealogical tree
- POJ2367(拓扑排序)
- POJ2367拓扑排序入门
- poj2367 拓扑排序
- poj2367 拓扑排序入门
- <poj2367>Genealogical tree
- 【POJ2367】Genealogical tree
- POJ2367【拓扑排序】
- BZOJ 1264[AHOI 2006 基因匹配]
- RabbitMQ消息队列(六):使用主题进行消息分发
- codeforces B
- lintcode:Minimum Adjustment Cost
- RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)
- poj2367
- 2048游戏python版
- hihoCoder[Offer收割]编程练习赛3题目解析
- 2010年山东省第一届ACM大学生程序设计竞赛:Hello World!
- LeetCode *** 238. Product of Array Except Self
- 【Java】分析JAVA应用CPU占用过高的问题
- 采用Memcached实现分布式Session
- binder
- RabbitMQ消息队列的小伙伴(八): ProtoBuf(Google Protocol Buffer)