點此鏈結1
可參考課本(高等教育出版社 - 陳越 - 《資料結構》)p225中關於prim演算法的描述解題。
本題相對於課本描述的演算法來說,不需要考慮 父節點 (parent),只需要考慮乙個總的wpl就行。
/**
* @file road connect every village.cpp
* @author your name ([email protected])
* @brief 公路村村通 :
* @version 0.1
* @date 2021-02-06
* *
*/#include
#include
#include
#include
#include
#include
using
namespace std;
const
int intmax =
pow(2,
15)-1
;/** 解題思路:
* prim 演算法描述
* 基本變數
* 1. 路徑點集合:
* 點 - 特殊值(初始為最大值),採用帶索引的向量集
* 點表示當前索引
* 特殊值:
* 無窮 表示從未訪問過的點;
* 0 表示樹內點;
* >0 表示當前點距離樹的距離
* 2. 最終費用:只需要計算乙個費用和就行!
* (3.父節點)
* * 初始化
* v0 特殊值應為 0
* 對v0的每乙個鄰接點,需要初始化路徑點集合中的特殊值為 到v0 的 路經長
* (更新父節點為v0)
* * while(路徑集合中找不到符合要求的路徑了)
* * 判斷是否找到了每乙個點以輸出
*/int
main()
);data[p2 -1]
.push_back()
;}vector<
int>
dis(v, intmax)
;// 路經長
auto minindex =
[&dis, v]()
->
intreturn index;};
// 從 0 開始
auto sum =0;
dis[0]
=0;for
(auto
&r : data[0]
) dis[r.first]
= r.second;
while
(true)if
(count_if
(dis.
begin()
, dis.
end(),
(int in)
)!= v)
cout <<-1
<< endl;
else
cout << sum << endl;
return0;
}
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個正整數,分別是該條道路直接連通的兩個城鎮的編號以及該道...
7 10 公路村村通
7 10 公路村村通 30 分 現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。輸入資料報括城鎮數目正整數n 1000 和候選道路數目m 3n 隨後的m行對應m條道路,每行給出3個正整數,分別是該條道路直接連通的兩個城鎮的編號以及...