POJ 2367 Genealogical tree [拓扑排序]
2011-09-21 10:53
323 查看
题意:给定一系列数点,依次给出点的后序结点,输出顺序
思路:简单拓扑排序
思路:简单拓扑排序
#include <iostream> #include <stdio.h> #include <string.h> #define MAXN 102 using namespace std; int map[MAXN][MAXN],ret[MAXN]; int n; //拓扑排序,邻接阵形式,复杂度O(n^2) //如果无法完成排序,返回0,否则返回1,ret返回有序点列 //传入图的大小n和邻接阵mat,不相邻点边权0 int toposort(){ int d[MAXN],i,j,k; for (i=0;i<n;i++) for (d[i]=j=0;j<n;d[i]+=map[j++][i]); for (k=0;k<n;ret[k++]=i){ for (i=0;d[i]&&i<n;i++); if (i==n) return 0; for (d[i]=-1,j=0;j<n;j++) d[j]-=map[i][j]; } return 1; } int main(){ while(cin>>n){ int m; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ map[i][j]=0; } } for(int i=0;i<n;i++){ while(scanf("%d",&m)!=EOF&&m) map[i][m-1]=1;//表示边i->m } toposort(); for(int i=0;i<n-1;i++){ cout<<ret[i]+1<<" "; } cout<<ret[n-1]+1; } return 0; } /*测试: Sample Input 5 0 4 5 1 0 1 0 5 3 0 3 0 Sample Output */
相关文章推荐
- POJ 2367 Genealogical tree 拓扑排序
- POJ - 2367 Genealogical tree (拓扑排序模板题)
- poj_2367_Genealogical tree_很基础的拓扑排序
- Genealogical tree POJ 2367【拓扑排序】
- POJ 2367:Genealogical tree (拓扑排序)
- POJ 2367Genealogical tree 简单拓扑排序
- POJ-2367 Genealogical tree (拓扑排序模板)
- POJ_2367_Genealogical tree(拓扑排序)
- poj 2367 & poj 1094 分析&解题报告(拓扑排序入门)
- poj 2367 Genealogical tree (拓扑排序)
- POJ 2367:Genealogical tree(拓扑排序)
- POJ:2367 Genealogical tree(普通简单版拓扑排序)
- poj 2367 Genealogical tree【拓扑排序基础题】
- POJ 2367 (入门拓扑排序 )
- Poj 2367 Genealogical tree(拓扑排序)
- poj 2367 Genealogical tree(拓扑排序)
- POJ 2367 Genealogical tree【拓扑排序】
- poj 2367 Genealogical tree 拓扑排序 解题报告
- poj 2367(拓扑排序TopSort)
- Poj 2367 Genealogical tree(拓扑排序)