拓撲排序 輸出

2021-07-06 07:55:11 字數 1547 閱讀 3373

拓撲排序

題目1449:確定比賽名次

時間限制:1 秒

記憶體限制:128 兆

特殊判題:否

提交:1879

解決:723

題目描述:有n個比賽隊(1<=n<=500),編號依次為1,2,3,。。。。,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序確定排名。

輸入:輸入有若干組,每組中的第一行為二個數n(1<=n<=500),m;其中n表示隊伍的個數,m表示接著有m行的輸入資料。接下來的m行資料中,每行也有兩個整數p1,p2表示即p1隊贏了p2隊。

輸出:給出乙個符合要求的排名。輸出時隊伍號之間有空格,最後一名後面沒有空格。

其他說明:符合條件的排名可能不是唯一的,此時要求輸出時編號小的隊伍在前;輸入資料保證是正確的,即輸入資料確保一定能有乙個符合要求的排名。

樣例輸入:

4 3

1 22 3

4 3

樣例輸出:

1 2 4 3

**如下:

#include #include #include #include using namespace std;

#define n 501

vectoredge[n];

int indegree[n]; // 儲存各點入度

queueout; // 用於輸出

queueq;

int tmp[n];

int main()

while (!q.empty()) q.pop();

while (!out.empty()) out.pop();

while (m--)

for (int i = 1; i <= n; i++)

if (0 == indegree[i]) q.push(i); // 入度為0的壓入佇列

while (!q.empty())

sort(tmp, tmp + size); // 將佇列中的元素彈出,排好序再壓入

for (int i = 0; i < size; i++)

q.push(tmp[i]);

int newp = q.front();

out.push(newp);

q.pop();

for (int i = 0; i < edge[newp].size(); i++) // 修改各點入度

if (0 == --indegree[edge[newp][i]]) q.push(edge[newp][i]); // 入度為0的壓入佇列

} for (int i = 0; i < n; i++)

printf("\n");

} return 0;

}

python 拓撲排序 Python 拓撲排序

python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...

輸出所有的拓撲排序 此後無良辰

由aov網構造拓撲序列的拓撲排序演算法主要是迴圈執行以下兩步,直到不存在入度為0的頂點為止。1 選擇乙個入度為0的頂點並輸出之 2 從網中刪除此頂點及所有出邊。附上原始碼 鏈式前向星儲存,鄰接矩陣一樣 void tuopu 注 拓撲排序不唯一分界線 分界線 要輸出所有的拓撲排序肯定要嘗試所有的順序 ...

python 排序 拓撲排序

在電腦科學領域中,有向圖的拓撲排序是其頂點的先行排序,對於每個從頂點u到頂點v的有向邊uv,在排序的結果中u都在v之前。如果圖是有向無環圖,則拓撲排序是可能的 為什麼不說一定呢?圖論 是組合數學的乙個分支,它和其他分支比如 群論 拓撲學 矩陣論有著密切的關係。圖是圖論的主要研究物件。圖是由若干給定的...