普里姆演算法 最小生成樹

2021-10-12 04:54:27 字數 2974 閱讀 8729

理論知識和講解:

錯誤:

[error] anonymous type with no linkage used to declare function 『int mininum(*, mgraph)』 with linkage [-fpermissive]

解決辦法:

解惑:

其中有 closedge[k].lowcoase=0; 這一句**出現疑問?

解答:

可以結合下面的**來看此圖

尋找最優路徑生成的最小生成樹

普里姆演算法:

#include

#include

#include

#include

#define infinity 65535

//定義乙個無限大的值

#define maxsize 50

//最大頂點個數

#include

using

namespace std;

typedef

char vertextype[4]

;typedef

char infoptr;

typedef

int vrtype;

typedef

enum

graphkind;

//圖的型別:有向圖,有向網,無向圖,無向網

typedef

struct

arcnode,adjmatrix[maxsize]

[maxsize]

;//圖型別的定義

typedef

struct

mgraph;

typedef

struct nodecloseedge[maxsize]

;//建立無向網n

void

creategraph1

(mgraph *n)

;//查詢

intlocatevertex

(mgraph n,vertextype v)

;//銷毀

void

destroygraph

(mgraph *n)

;//列印網

void

displaygraph

(mgraph n)

;//將 lowcoase的最小值的序號返回

intmininum

(closeedge edge,mgraph n)

;//利用普利姆演算法從第u個頂點出發構造網g的最小生成樹

void

prim

(mgraph n,vertextype u)

;//建立無向網n

void

creategraph1

(mgraph *n)

//初始化鄰接矩陣

for(i=

0;i>vernum;i++)}

printf

("請輸入%d條弧的弧尾 弧頭 權值 (以空格作為間距):\n"

,n->arcnum)

;for

(k=0

;k>arcnum;k++)}

} n-

>kind=dn;

}//查詢

intlocatevertex

(mgraph n,vertextype v)

}return-1

;}//銷毀網

void

destroygraph

(mgraph *n)}}

} n-

>vernum=0;

n->arcnum=0;

}//網列印

void

displaygraph

(mgraph n)

printf

("\n網n的;\n");

printf

("序號i=");

for(i=

0;i)printf

("%4d"

,i);

printf

("\n");

for(i=

0;i)printf

("\n");

}}intmain()

//利用普利姆演算法從第u個頂點出發構造網g的最小生成樹

void

prim

(mgraph n,vertextype u)

closedge[k]

.lowcoase=0;

//初始時集合u只包括頂點

printf

("最小代價生成樹的各條邊為:\n");

for(i=

1;i}}

//將 lowcoase的最小值的序號返回

intmininum

(closeedge edge,mgraph n)

min=edge[i]

.lowcoase;

//min為第乙個不為0的值

k=i;

for(j=i+

1;j(edge[j]

.lowcoase>

0&&edge[j]

.lowcoase

return k;

}

效果圖:

最小生成樹(普里姆演算法)

關於什麼是prim 普里姆演算法 在實際生活中,我們常常碰到類似這種一類問題 如果要在n個城市之間建立通訊聯絡網,則連通n個城市僅僅須要n 1條線路。這時。我們須要考慮這樣乙個問題。怎樣在最節省經費前提 下建立這個通訊網.換句話說,我們須要在這n個城市中找出乙個包括全部城市的連通子圖,使得 其全部邊...

最小生成樹 普里姆演算法

普利姆演算法 最小生成樹 把所有頂點分為 2 個集合 乙個表示已經選中的頂點集合 另乙個表示未選中的頂點集合 例如 a,b,c,d,e 五個頂點 1.任意選擇乙個頂點 放在 已經選中的頂點集合中 假如 選a 2.將a 與未選中頂點集合中 選擇 一頂點 條件 權值最小的乙個頂點 如何權值相同 則任意選...

最小生成樹 普里姆演算法

當我們要求解n個連線城市之間的路線問題,就需要我們進行乙個計算。而在連通網上面,我們稱這類問題為最小代價生成樹 最小生成樹 問題。今天我們主要討論的是用普里姆演算法實現最小生成樹。如圖所示,a圖是乙個有權值的連通圖。要對其進行最小生成樹求解,假設初始點為v1,尋找與1有關係而且權值最小的頂點 圖源嚴...