7 3 公路村村通 30分 含解析

2021-10-07 01:26:21 字數 1463 閱讀 4347

現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。

輸入資料報括城鎮數目正整數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

本題使用prim演算法思想,找到最小值,但這題用圖存資料然後運用prim演算法會很容易超時,所以通過輸入資料,找到合適的化簡方法,通過輸入的路徑權重公升序排序,然後每次遍歷這組資料,找到最短的一條路徑滿足乙個點已經被讀取,另乙個點沒被讀取,然後這條路徑就是要找的,然後把未讀取的點標記為已讀取,並sum+=該路徑權重,然後重新迴圈,若中途有一次遍歷完這組資料都找不到該路徑,則該圖應該不是連通圖,返回-1,結束函式,不多說了,直接上**。

#include

#include

#include

using

namespace std;

typedef

struct node road;

bool

bj(road m,road n)

road x[

3001];

int n, m;

void

hvv();

intlowcost()

;int

main()

void

hvv(

)sort

(x,x+m,bj)

;//公升序排序

}int

lowcost()

;int sum =0;

//記錄最低費用

x[x[0]

.e]=1;

//把最小的路徑的兩個點都標記並且sum+=該路徑權值

x[x[0]

.s]=1;

sum +

= x[0]

.value;

int i, j;

for(i =

2; i < n; i++

)elseif(

!x[x[j]

.e]&& x[x[j]

.s])}if

(j == m)

return-1

;}return sum;

}

7 3 公路村村通(30 分)

7 5 暢通工程之最低成本建設問題 30 分 某地區經過對城鎮交通狀況的調查,得到現有城鎮間快速道路的統計資料,並提出 暢通工程 的目標 使整個地區任何兩個城鎮間都可以實現快速交通 但不一定有直接的快速道路相連,只要互相間接通過快速路可達即可 現得到城鎮道路統計表,表中列出了有可能建設成快速路的若干...

5 10 公路村村通 30分

5 10 公路村村通 30分 現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。輸入資料報括城鎮數目正整數n n le 1000 1 000 和候選道路數目m m le 3n 3 n 隨後的m m行對應m m條道路,每行給出3個正整...

5 9 公路村村通 30分

5 9 公路村村通 30分 現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。輸入格式 輸入資料報括城鎮數目正整數nn le 1000 1000 和候選道路數目mm le 3n 3n 隨後的mm行對應mm條道路,每行給出3個正整數,...