データ構造学習日二十から一

午後十一時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である])。10 ;
 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に私に良い長い時間を与えた..私は本当にない何のチュートリアルが表示されていないではないでしょう)

  プロジェクトのための一般的な作業の手配

おすすめ

転載: www.cnblogs.com/57one/p/11478894.html