poj 2367(拓扑排序TopSort)
来源:互联网 发布:集合和数组的优缺点 编辑:程序博客网 时间:2024/05/16 09:47
题意简单,说到底就是求符合的拓扑排序。
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#define maxn 100using 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(拓扑排序TopSort)
- 拓扑排序 topsort()
- TopSort(拓扑排序)
- 【拓扑排序】最小拓扑序 topsort
- 算法学习 拓扑排序(TopSort)
- HDU.2647 Reward(拓扑排序 TopSort)
- poj 2367 拓扑排序
- poj 2367 拓扑排序
- poj 2367 拓扑排序
- POJ 2367 拓扑排序
- POJ 2367 拓扑排序
- poj 2367拓扑排序
- poj 2367 拓扑排序
- 拓扑排序---(poj 2367)
- 一个问题,看topsort[拓扑排序]的两种解决办法。
- TopSort(拓扑排序)中DFS和BFS的应用
- HDU.1285 确定比赛名次 (拓扑排序 TopSort)
- HDU.3342 Legal or Not (拓扑排序 TopSort)
- Python安装、配置图文详解
- 快速排序
- 透过汇编另眼看世界之DLL导出函数调用
- Unix发展树状图
- DESCryptoServiceProvider java MD5
- poj 2367(拓扑排序TopSort)
- IIS 7 请求在此上下文中不可用
- Interpolation methods
- oc基础语法——(if···else语句用法)
- 长连接与短连接(图)
- RTSP点播——消息流程实例
- #include<time.h>
- Chromium之启动篇
- 【道森试听】坏块处理(data block)——Roger大师