//由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.函式的原型可以單獨放於乙個標頭檔案中,一定要具有...