第七章(6) 最小生成樹

2021-07-02 01:51:44 字數 2524 閱讀 2252

//由minispantree_prim()可知prim演算法的時間複雜度為o(n*n),(n為頂點數)與網中的邊數無關,因此使用於求邊稠密的網的最小生成樹。

//而kruskal演算法恰恰相反,它的時間複雜度為o(e*log e),(e為網中邊的數目)。它比較適合求邊稀疏的網的最小生成樹。

#include < stdio.h >

#include < stdlib.h >

#include < string.h >

#define true 1  

#define false 0    

#define ok 1

#define error 0

#define overflow -2 

typedef int status ;

//---------------圖的陣列(鄰接矩陣)儲存表示------------------//

#define infinity 2147483647    //最大值(無窮大)int_max = 2147483647

#define max_vertex_num 20    //最大頂點個數(vertex頂點)

#define max_info 20      //關於邊的資訊的字串長度

#define max_name 5      //關於頂點資訊的字串長度

typedef int vrtype ;     //此處考慮無權圖

typedef char infotype ;

typedef char vertextype[max_name];  //vertextype可以根據實際情況靈活設定型別!int,float,char…

typedef enumgrapkind ; //

typedef struct arccell

arccell , adjmatrix[ max_vertex_num ][ max_vertex_num ] ;

typedef struct

mgraph ;

status initgraph( mgraph *g ) ;

status inputinformation( mgraph *g , int i , int j ) ;

status locatevex( mgraph g , vertextype u ) ;

status createudn( mgraph *g ) ;

typedef struct   // 記錄從頂點集u到v-u的代價最小的邊的輔助陣列定義

minside[ max_vertex_num ] ;

void minispantree_prim( mgraph g , vertextype u ) ;

int minimum( minside ms , mgraph g ) ;

#include "head.h"

//--------------------basic fuction about the udn---------------------//

status initgraph( mgraph *g )

for( i = 0 ; i < ( *g ).vexnum ; ++ i )  //初始化鄰接矩陣

網  infinity等效於無窮大  

( *g ).arcs[ i ][ j ].info = null ;}}

return ok ;

}status inputinformation( mgraph *g , int i , int j )

return ok ;

}status locatevex( mgraph g , vertextype u ) //若g中存在頂點u,則返回該頂點在圖中位置;否則返回-1 

return eof ;   //eof means -1 .

}status createudn( mgraph *g )  //構造無向網*g

( *g ).arcs[ j ][ i ] = ( *g ).arcs[ i ][ j ] ;  // adj and info.

}( *g ).kind = udn ;       //此處udn為3,這是在enun中決定的!

return ok ; 

}//-----------------function for minspantree-------------------------------//

void minispantree_prim( mgraph g , vertextype u )//用prim演算法從頂點u出發構造網g的最小生成樹t,輸出t的各條邊.

}closedge[ k ].lowcost = 0 ;  //初始,u = ;

for( i = 1 ; i < g.vexnum ; ++ i )  //選擇其餘的g.vexnum - 1 個頂點.}} 

}int minimum( minside ms , mgraph g )    //求closedge.lowcost的最小值

}return k ;

}int main( )

6 最小生成樹

生成樹是搜尋出來的,不同的搜尋演算法搜尋出來的生成樹也不同。最小生成樹是建立在網 帶權圖 上的概念。最小生成樹 尋找連線所有點 v vv 的弧 v 1 v 1v 1 權值和為最小。樹有倆個特點 可以應用在 先解釋倆個概念 切分 和 橫切邊 切分 將圖的點分成倆部分。二分圖除了切分外,還要滿足乙個條件...

python第七章 python教程(第七章)

字典和集合 字典是python中唯一,乙個對映型別 如何建立乙個字典,如下 dict dict 滲透 網路安全 怎麼理解字典呢?現實生活中的字典可以通過首字母進行查詢要查詢的漢子,python也可以這樣理解,通過 前的元素查詢到冒號後的元素。為什麼說字典是唯一乙個對映型別呢?看圖。對映型別區別與序列...

第七章 函式

1.ansi c 允許函式原型的使用,函式宣告提供給編譯器和之後的呼叫函式返回值型別,引數型別和數量的資訊,而k c用單獨的列表給出引數的型別,編譯器只記住函式的返回值型別,但不儲存函式的引數數量和型別 2.沒有return語句的函式,隱式的返回 3.函式的原型可以單獨放於乙個標頭檔案中,一定要具有...