演算法學習 拓撲排序(佇列應用)

2021-07-24 14:34:46 字數 743 閱讀 7926

題目

分析

乙個節點沒有節點指向(即入度為0)的時候可以順利輸出,如果有則不能。可以用鄰接矩陣的方式來儲存現有的圖,將某節點列下所有的相加後如果等於0這說明當前結點可輸出。

這裡給出關鍵**和注釋

int graph[12][12];  // 結點數為n,用鄰接矩陣graph[n][n]儲存邊權

int indegree[12]; // 用indegree[n]儲存每個結點的入度,具體情境下會事先初始化

void topologic(int* toposort)

} int cur; // 當前入度為0的結點

while (!q.empty())

}} }

}

總結

拓撲排序的本質是不斷輸出入度為0的點,該演算法可用於判斷途中是否存在換

可以用佇列(或者棧)儲存入度為0的點,避免每次遍歷所有點;每次更新連線點的入度即可

拓撲排序其實是給定了結點的一組偏序關係。

拓撲的含義不限於此,在gis中,他往往指點、線、面、體之間的相互鄰接關係,即「橡皮泥集合」。儲存這些關係,往往能夠對某些演算法帶來好處

演算法學習 拓撲排序

相關例題 要理解拓撲排序,首先需要知道圖論的乙個基本概念 入度 有向圖中某點作為圖中邊的終點的次數之和 某點的入邊條數 與之相對的是出度 出度 有向圖中某點作為圖中邊的起點的次數之和 某點的出邊條數 拿上面那張圖來說,a和b兩點的出度均為1,入度為0,而c點的入度為2 在前面已經說過,我們將每一項工...

演算法學習筆記(拓撲排序)

拓撲排序,在我現在看來,就是用來解決一系列分層次執行的問題。什麼意思呢?舉個例子 oi wiki上看到的 比如說我們大學生都要面臨選課問題,那麼某些課程會有一些先行課程,必須先修這些先行課程才能夠繼續修讀某課程,那麼現在問題來了,小明有n種課程需要選讀,n種課程之中,有一些課程有先後關係 也就是說修...

演算法學習筆記 19 拓撲排序

計算拓撲序列的乙個方式是,用bfs來嘗試訪問所有的節點,但是有乙個約束就是只有入度為0 00的節點才能被加入到擴充套件佇列裡。每次從佇列裡取出乙個節點,也就同時在圖中將這個節點拆除,所以它的所有後繼的節點都減少1 11,如果已經減少到0 00,那麼就可以加入到佇列中。在上面的例子中,一開始只有a a...