poj 2367(拓扑排序TopSort)
2013-04-18 14:51
323 查看
题意简单,说到底就是求符合的拓扑排序。
代码如下:
代码如下:
#include <iostream> #include <cstdio> #include <cstring> #define maxn 100 using namespace std; struct edge { int v, next; }; int g[maxn], n, list[maxn]; edge e[maxn*maxn]; bool topsortdfs( int v, edge e[], int g[], int u[], int &m ) { u[v] = -2; for ( int i = g[v]; i != -1; i = e[i].next ) if ( u[e[i].v]==-2 ) return false; else if ( u[e[i].v]==-1 && !topsortdfs(e[i].v,e,g,u,m) ) return false; u[v] = --m; return true; } void topsort( edge e[], int g[], int n, int list[] ) { static int u[maxn]; int m = n, i; memset(u,255,sizeof(u)); for ( i = 0; i < n; i++ ) if ( u[i]==-1 && !topsortdfs(i,e,g,u,m) ) return; for ( i = 0; i < n; i++ ) list[u[i]] = i; printf( "%d", list[0]+1 ); for ( i = 1; i < n; i++ ) printf( " %d", list[i]+1 ); printf( "\n" ); } int main() { int i, j, k; cin >> n ; memset(g,255,sizeof(g)); for ( i = j = 0; i < n; i++ ) while ( scanf("%d", &k) ) { if ( k == 0 ) break; k--; e[j].v = k; e[j].next = g[i]; g[i] = j++; } topsort( e,g,n,list); }
相关文章推荐
- POJ 2367 Genealogical tree (拓扑排序)
- POJ 2367 Genealogical tree (拓扑排序)
- POJ-2367 Genealogical tree(拓扑排序)
- 【POJ】2367 Genealogical tree 拓扑排序
- POJ 2367Genealogical tree 简单拓扑排序
- POJ- 2367- Genealogical tree【拓扑排序】
- 拓扑排序(poj 2367)
- POJ 2367 Genealogical tree 拓扑排序
- E - Genealogical tree POJ - 2367 拓扑排序
- Genealogical tree POJ 2367【拓扑排序】
- 拓扑排序入门poj2367
- POJ 2367 Genealogical tree(拓扑排序)
- POJ 2367 Genealogical tree (拓扑排序)
- poj 2367 Genealogical tree ( 拓扑排序--二维数组)
- POJ2762 Going from u to v or from v to u? 强连通 Tarjan缩点+拓扑排序topsort
- POJ 2367---Genealogical tree(拓扑排序基础题)
- poj 2367 Genealogical tree(拓扑排序入门)
- poj 2367 & poj 1094 分析&解题报告(拓扑排序入门)
- POJ 2367 Genealogical tree [拓扑排序]
- POJ 2367 Genealogical tree(系谱图,拓扑排序)