資料結構與演算法 普里姆演算法

2021-10-09 11:20:25 字數 1364 閱讀 7581

應用場景

修路問題的本質就是最小生成樹問題,簡稱mst

給定乙個帶權的無向連通圖,如何選取一顆生成樹,使樹上所有邊上權的總和最小,這叫最小生成樹

n個頂點,一定有n-1條邊

包含全部頂點

普里姆演算法

設g=(v, e)是連通網,t=(u, d)是最小生成樹,v,u是頂點集合,e,d是邊的集合

若從頂點u開始生成最小生成樹,則從集合v中取出頂點u放入集合中,標記頂點v的visited[u] = 1

重複步驟2,直到u與v相等,即所有頂點都被標記訪問過,此時d中有n-1條邊

**實現

public

class

primalgorithm

;int verxs = data.length;

int[

] weight =,,

,,,,

}; mgraph graph =

newmgraph

(verxs)

; mintree mintree =

newmintree()

; mintree.

creategraph

(graph, verxs, data, weight)

; mintree.

showgraph

(graph);

mintree.

prim

(graph,3)

;}}class

mintree}}

/** * 編寫prim演算法

* @param graph 圖

* @param v 開始的頂點

*/public

void

prim

(mgraph graph,

int v)}}

//找到一條邊最小的

system.out.

println

("邊<"

+ graph.data[h1]

+","

+ graph.data[h2]

+"> 權值:"

+ minweight)

; visited[h2]=1

; minweight =

10000;}

}public

void

showgraph

(mgraph graph)

system.out.

println()

;}}}

class

mgraph

}

資料結構與演算法之普里姆演算法

思想 選取圖中任意乙個頂點,把它看成一棵樹,並在與此樹相接的邊中選取乙個權值最小的邊,並將與這條邊相接的另乙個頂點也納入樹中,得到了一顆有兩個頂點的樹,以此類推,知道訪問完圖中所有的頂點並納入樹中為止 普里姆演算法構造最小生成樹的過程中 需要構造兩個陣列vset 和lowcost vset i 1表...

常用資料結構之普里姆演算法

在圖中,尋找一棵最小代價的生成樹尤為重要。現在有普里姆演算法。基於鄰接矩陣來實現。void prim mgraph g,int v0,int sum int lowcost maxsize vset maxsize v int k int min int v v0 for i 0 i 大致思路解析 ...

普里姆演算法

include include include include using namespace std define max name 5 define max vertex num 20 權的上限值 typedef char vertex max name 頂點名字串 typedef int ad...