**如下:
現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。
輸入資料報括城鎮數目正整數n(≤1000)和候選道路數目m(≤3n);隨後的m行對應m條道路,每行給出3個正整數,分別是該條道路直接連通的兩個城鎮的編號以及該道路改建的預算成本。為簡單起見,城鎮從1到n編號。
輸出村村通需要的最低成本。如果輸入資料不足以保證暢通,則輸出−1,表示需要建設更多公路。
6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3
12
#include
using
namespace std;
#define maxv 3010
#define inf 0xffff
int cost =0;
//記錄最小總花費
int lowcost[maxv]
;int closest[maxv]
;typedef
struct
mgraph;
//圖鄰接矩陣型別
mgraph g;
void
prim
(int v)
//prim演算法,v是開始的點,可以任意取乙個
for(i =
1; i < g.n; i++
)//接下來找剩下的n-1個節點
}//printf("邊(%d,%d)權為:%d\n", closest[k], k, min);//輸出被連線節點與連線節點,以及它們的權值
//更新lowcost陣列,closest陣列
//lowcost[k] = 0;//表明k節點已被選了(作標記)
//選中乙個節點完成連線之後,作陣列相應的調整
if(k!=-1
)else
//否則再也找不到這樣的k
break
;for
(j =
1; j <= g.n; j++
)//遍歷所有節點}}
}int
main()
//構造鄰接矩陣
for(
int i =
0;i)prim(1
);//呼叫prim演算法
int flag =1;
for(
int i =
1;i<=g.n;i++)}
if(flag)
cout
cout<<
"-1"
}
PTA 7 10 公路村村通 30分
現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。輸入資料報括城鎮數目正整數n 1000 和候選道路數目m 3n 隨後的m行對應m條道路,每行給出3個正整數,分別是該條道路直接連通的兩個城鎮的編號以及該道路改建的預算成本。為簡單起見...
7 10 公路村村通
通過的 以及注釋,注釋最多的地方,是思考的最多的地方 include include includeusing namespace std define n 1005 下次不要用n來命名,不然容易和下面的n弄混,unnecessarily int f n 樹的母節點,例如節點1的母節點f 1 2,那...
7 10 公路村村通
傳送門 題目描述 現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。輸入格式 輸入資料報括城鎮數目正整數n 1000 和候選道路數目m 3n 隨後的m行對應m條道路,每行給出3個正整數,分別是該條道路直接連通的兩個城鎮的編號以及該道...