#include #include#include
#include
using
namespace
std;
const
int maxn = 505
; vector
graph[maxn];
inttopnum[maxn], nodenum[maxn];;
intnumvertex, numedge;
//有向無環圖一定存在拓撲序
void
toposort()
//迴圈處理入度為0的節點,並賦予拓撲序
int cnt = 0
;
while(!que.empty())
} //圖中存在環則無拓撲序
if(cnt != numvertex) return
;
//如果圖並不一定是全聯通的,那麼判原圖的某一連通域中是否存在環:
for(int i=1; i<=numvertex; ++i) if(graph[i][0]) puts("
somerwhere of the graph has a cycle
");
//輸出以拓撲序排列的節點編號
for(int i=1; i<=numvertex; ++i) nodenum[topnum[i]] =i;
for(int i=1; i<=numvertex; ++i) printf("
%d%c
", nodenum[i], i==numvertex?'
\n':'
');
}
intmain()
//建圖
for(int i=1; i<=numedge; ++i)
} //拓撲排序
toposort();
} return
0;
}
優先佇列 stl 拓撲排序
time limit 1 sec memory limit 128 mb submit 169 solved 73 submit status web board 馬上要上體育課了,上體育課之前總歸是要排個隊的,ly作為班長,怎麼排隊的問題只能由她來解決,但是馬上要上課了,ly又不清楚所有人的身高,...
vijos拓撲編號(逆向拓撲排序 優先佇列)
描述h國有n個城市,城市與城市之間有m條單向道路,滿足任何城市不能通過某條路徑回到自己。現在國王想給城市重新編號,令第i個城市的新的編號為a i 滿足所有城市的新的編號都互不相同,並且編號為 1,n 之間的整數。國王認為乙個編號方案是優美的當且僅當對於任意的兩個城市i,j,如果i能夠到達j,那麼a ...
拓撲排序 優先順序佇列
description 拓撲排序,並且輸出最小字典序的乙個可能順序,採用最小優先順序佇列可以保證按最小字典序輸出。input 輸入第一行包含兩個數n,m分別表示有向無環圖的點數和邊數。接下來m行,每行兩個數ai,bi,表示圖中存在一條ai指向bi的有向邊。output 輸出n個數,每個數用空格隔開,...