最小生成樹 prime

2021-07-05 21:39:12 字數 1354 閱讀 2969

#include "stdio.h"

#define max 10

#define inf 999

typedef

struct mgraph

mgraph;

int lowest[max]; //lowest[vi]表示當前生成樹這一整體到其餘頂點的權值

int cloest[max]; //cloest[vi]儲存v-s中點vi在s中最鄰接頂點,v為總集合,s為目前的生成樹

int vset[max]; //為標記陣列,vset[vi]=1表示vi被併入最小生成樹,否則沒有

//v0為源點

//返回最小生成樹的權值,並列印生成樹中的邊

int prime(int v0, mgraph g)

vset[v0] = 1;

lowest[v0] = inf;

int sum = 0; //生成樹的權值

int min, v;

for(i=0; i/*用於選出候選邊中的最小值*/

for(j=0; j/*選出當前生成樹到其餘最短邊中最短的一條*/

if(vset[j]==0 && lowest[j]1; //此頂點被併入最短路徑

printf("依次被選入的邊為:\n");

if(i1) //避免最後一條邊被輸出兩次

for(j=0; j//判斷頂點v加入是否會使通往頂點j的路徑更短,如果出現,則改變原來的路徑及長度

if(vset[j]==0 && g.edge[v][j]//改變當前樹到剩餘頂點最短邊的權值

cloest[j] = v; //改變到未併入最小生成數的最鄰接頂點}}

}return sum;

}void init(mgraph &g, int edge[5], int n)

, ,,,

};mgraph g;

init(g, edge, n);

int v0;

int i, j;

printf("圖的矩陣為(1000表示不可直接到達):\n");

for(i=0; ifor(j=0; jprintf("%d\t", g.edge[i][j]);

printf("\n");

}printf("請輸入起始頂點(0~%d):", g.n-1);

scanf("%d", &v0);

int u = prime(v0, g);

printf("最小生成樹的權值為:%d\n", u);

最小生成樹 Prime演算法

對於乙個圖,它的所有生成樹中必有乙個 邊的權值最小 的生成樹,我們把它稱為最小生成樹。概念很抽象,換做實際問題 有十個城市,各個城市之間距離或遠或近。需要建設乙個道路網,把十個城市連線在一起,要求道路網的道路長度最小。各個城市的連線可以抽象為乙個圖,本質上即是求該圖的乙個最小生成樹。每乙個圖可能有多...

1078 最小生成樹 prime

時間限制 1 s 空間限制 128000 kb 題目等級 silver 題解 農民約翰被選為他們鎮的鎮長!他其中乙個競選承諾就是在鎮上建立起網際網路,並連線到所有的農場。當然,他需要你的幫助。約翰已經給他的農場安排了一條高速的網路線路,他想把這條線路共享給其他農場。為了使花費最少,他想鋪設最短的光纖...

最小生成樹 prime演算法

問題 c 建立通訊 時間限制 1 sec 記憶體限制 128 mb 提交 7 解決 4 提交 狀態 討論版 題目描述 據不完全統計,受 影響,四川大部分災區通訊陷入癱瘓,數千個基站因斷電 傳輸中斷等原因退出服務,目前總公司已緊急部署對受災地區進行通訊搶修。按照應急通訊保障預案,必須盡快 付出代價最小...