午後十一時34分47秒2019年9月6日
次の夏の学校はまだ始まっていない、学ぶことを続けます
PTA質問21プリム最小スパニングツリー生成
1 の#define _CRT_SECURE_NO_WARNINGS 2の#include <stdio.hの> 3の#include < malloc関数 .H> 4 の#define INIFITY 65635 5 6のtypedef int型頂点。 7のtypedef 構造体のeNode * エッジ。 8 構造体のeNode 9 { 10 頂点V1、V2。 11 int型の重量; 12 }。 13 14のtypedef 構造体グラフ* MGraph。 15 構造体のグラフ 16 { 17 INT のNv。 18 INT ネ。 19 INT G [ 1001 ] [ 1001 ]。 20 }。 21 22 MGraph CreateGraph(INT VertexNum) 23 { 24 MGraphグラフ=(MGraph)はmalloc(はsizeof(構造体グラフ))。 25 Graph->のNv = VertexNum。 26 Graph-> NE = 0 。 27 については、(int型 I = 0を、I <Graph->ネバダ州; I ++) 28 のための(INT J = 0 ; J <Graph->ネバダ州; J ++ ) 29 Graph-> G [I] [J] = INIFITY。 30 リターングラフ。 31 } 32 33 ボイド挿入(MGraphグラフ、エッジE) 34 { 35 Graph-> G [E-> V1] [E-> V2] = E-> 体重; 36 Graph-> G [E-> V2] [E-> V1] = E-> 体重; 37 } 38 39 MGraph BuildGraph() 40 { 41 INT のNv。 42 エッジE; 43 scanf関数(" %のD "、およびNV)。 44 MGraphグラフ= CreateGraph(NV)。 45 のscanf(" %d個の\ n "、&(Graph-> NE))。 46 のためには、(int型、I = 0 ; I <Graph-> NE; I ++ ) 47 { 48 E =(エッジ)はmalloc(はsizeof(構造体eノード))。 49 のscanf(" %D%D%D \ n "、&(E-> V1)、および(E-> V2)、および(E-> 重量)); 51である } 52ことで 戻り、グラフ 53である } れる54 55 INT IsEdge(W頂点グラフMGraph、頂点Vである) 56は 、{ 57が 復帰?(Graph-> G [V] <INIFITY [Wである])。1:0 ; 58 } 59 // プリム問題を解決するために、最小スパニングツリーアルゴリズムを使用して 60 61れる INTディスト[ 1001 ]; //の点から木までの距離を表し、 62は intを親[ 1001 ]; 63である INT全重量; //は、合計コストを表し 64 INTをVCOUNT; // ドットの数が含ま 65 INT FindMinDist(MGraphグラフ) 66 { 67 INT MinDist = INIFITYを、 68 INT MINV; 69 用の(int型 I = 0 ; I <Graph->ネバダ州; Iは++ ) 70 { 71は、 IF(ディスト[I] =! - 1。 &&ディスト[I] < MinDist) 72 { 73は MinDist = ディスト[I]; 74 MINV = I; 75 } 76 } 77 もし(MinDist < INIFITY) 78 リターンMINV。 79 他の 80 の戻り 0 ; 81 } 82 INT プリム(MGraphグラフ頂点S) 83 { 84 のために(int型 i = 0 ; I <Graph->ネバダ州; I ++ ) 85 { 86 ディスト[I] = Graph-> G [S] [I]。 87 であれば(ディスト[I] < INIFITY) 88 親[I] =のS。 89 他の 90 親[I] = - 1; 91 } 92 ディスト[S] = - 1 。 93 親[S] = - 1 。 94 VCOUNT ++ ; 95 一方、(1 ) 96 { 97 のint V = FindMinDist(グラフ)。 98 もし(!V) 99 ブレーク。 100 全重量+ = ディスト[V]。 101 ディスト[V] = - 1 。 102 VCOUNT ++ 。 103 のための(int型 I =0 ; I <Graph->ネバダ州。私は++ ) 104 { 105を 場合(! -ディストは、[I] = 1 && IsEdge(グラフ、V、I)) 106 { 107 場合(Graph-> G [V] [I] < ディスト[I]) 108 { 109 ディスト[I] = Graph-> G [V] [I]。 110 親[I] = V。 111 } 112 } 113 } 114 } 115 であれば(VCOUNT <Graph-> NV) 116 リターン -1 ; 117 他 118 リターン全重量; 119 } 120 INT メイン() 121 { 122 MGraphグラフ= BuildGraph()。 123 のprintf(" %dの"、プリム(グラフ、0 )); 124 戻り 0 ; 125 }
トポロジカルソート
注文トポロジ:前方に一定のV Wの有向パスがあるWにVからの数字は、この条件の頂点シーケンスのシーケンスを満たしている場合には、トポロジカルと呼ばれます
トポロジカル順序のプロセスを取得しますトポロジカル整列です
AOV(Acitivity頂点における)ネットワークトポロジーの合理的な配列が存在する場合、それは非循環有向グラフ(有向非巡回グラフ、DAG)でなければなりません
クリティカルパスの問題(トポロジカルソートアプリケーション)
AOE(ONエッジAcitivity)ネットワーク(OS:倫理問題がPTAに私に良い長い時間を与えた..私は本当にない何のチュートリアルが表示されていないではないでしょう)
プロジェクトのための一般的な作業の手配