有向非巡回グラフDAGのトポロジカルソートと単一ソースの最短パスソリューション:負の重みのエッジが存在する可能性がありますが、ループはありません(正の重み付きリングも)

1.有向非循環グラフのトポロジカルソート:
深さ優先検索後ノードの終了時刻が逆順取得されたシーケンスはトポロジーシーケンス
例
です。例:1.1。疑似コードの説明:
ここに画像の説明を挿入
DFSの実行時間がO(V + E)であるため、トポロジーソートはO(V + E)時間で完了できます。

2.有向非循環グラフの単一ソースの最短経路:2.1。グラフの
ノード初期化の疑似コード:

void initializeSingleSource(Graph* G, node& s){
    
    
	for(each node in 顶点集合V){
    
    
		node.d = 无穷大; // 初始化距离无穷大
		node.pre = NULL;
	}
	s.d = 0; // 源点距离为0
}

2.2。スラック操作の疑似コード:

void relax(node& u, node& v, int weight){
    
    
	if(u.d+weight<v.d){
    
    
		v.d = u.d+weight; // 距离变小
		v.pre = u; // 记录路径
	}
}

2.3。単一ソースの最短パスの疑似コード:
ここに画像の説明を挿入
2.4。図:
ここに画像の説明を挿入

総括する:

1.トポロジカルソート後、単一ソースの最短経路ソリューションを完了するのに必要なサイクルは1つだけです。

おすすめ

転載: blog.csdn.net/qq_33726635/article/details/106504178