拓撲排序的演算法實現

2021-10-23 07:02:09 字數 2531 閱讀 3054

找出乙個入度為 0 的頂點,通過遞迴的方式遍歷它所有可達的頂點,將其輸出到拓撲排序的結果序列中,對遍歷過的頂點做標記,避免其被重複訪問。迴圈執行上面的過程,直到所有的頂點都被輸出。

public class topologicalsort_adjacencylist_dfs 

this.isvisited = new boolean[vertexnum];

this.mreversepost = new stack<>();

}/**

* 新增圖的邊,累計終止頂點入度

** @param s 起始頂點

* @param t 終止頂點

*/public void addedge(int s, int t)

/*** 拓撲排序

*/public void sort()

}system.out.println(mreversepost);

}/**

* 遞迴方法

** @param s

*/private void recurdfs(int s)

isvisited[s] = true;

mreversepost.push(s);

for (int i = 0; i < madjacencylist[s].size(); i++)

mindegree[w]--;

if (mindegree[w] == 0) }}

public static void main(string args)

}

public class topologicalsort_adjacencymatrix_dfs 

}this.isvisited = new boolean[vertexnum];

this.mreversepost = new stack<>();

}/**

* 新增圖的邊,累計終止頂點入度

** @param s 起始頂點

* @param t 終止頂點

*/public void addedge(int s, int t)

/*** 拓撲排序

*/public void sort()

}system.out.println(mreversepost);

}/**

* 遞迴方法

** @param s

*/private void recurdfs(int s)

isvisited[s] = true;

mreversepost.push(s);

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

}public static void main(string args)

}

找出乙個入度為 0 的頂點,將其輸出到拓撲排序的結果序列中,並且把這個頂點從圖中刪除。迴圈執行上面的過程,直到所有的頂點都被輸出。

public class topologicalsort_adjacencylist_kahn 

this.mzerodegreedeque = new arraydeque<>();

}/**

* 新增圖的邊,累計終止頂點入度

** @param s 起始頂點

* @param t 終止頂點

*/public void addedge(int s, int t)

/*** 拓撲排序

*/public void sort()

}listresult = new arraylist<>();

while (!mzerodegreedeque.isempty())

}result.add(s);

}system.out.println(result);

}public static void main(string args)

}

public class topologicalsort_adjacencymatrix_kahn 

}this.mzerodegreedeque = new arraydeque<>();

}/**

* 新增圖的邊,累計終止頂點入度

** @param s 起始頂點

* @param t 終止頂點

*/public void addedge(int s, int t)

/*** 拓撲排序

*/public void sort()

}listresult = new arraylist<>();

while (!mzerodegreedeque.isempty())

mindegree[j]--;

if (mindegree[j] == 0)

}result.add(s);

}system.out.println(result);

}public static void main(string args)

}

拓撲排序演算法

對許多資料結構教材實在不滿意,至少我是看不懂 至於拓撲排序演算法,教材上那些偽 真真教人頭暈。只寫了幾個struct結構,我根本看不出這是鄰接表。如果給出乙個清晰明了的圖,一切不就簡單了?總之,關鍵就是建立乙個鄰接表。然後利用這個表進行拓撲排序。邊表結點宣告 typedef struct edgen...

拓撲排序演算法

對乙個 有向無環圖 directed acyclic graph簡稱dag g進行拓撲排序,是將g中所有頂點排成乙個線性序列,使得圖中任意一對頂點u和v,乙個有向無環圖的拓撲序列不是唯一的 進行拓撲排序的演算法並不複雜 1 在有向圖中選乙個沒有前驅 入度為0 的頂點且輸出之 2 從圖中刪除該頂點及它...

演算法 拓撲排序

定義 應用 有向圖來表示,圖中的頂點代表活動 子工程 圖中的有向邊代表活動的先後關係,即有向邊的起點的活動是終點活動的前序活動,只有當起點活動完成之後,其終點活動才能進行。通常,我們把這種頂點表示活動 邊表示活動間先後關係的有向圖稱做頂點活動網 activity on vertex network ...