全地區暢通需要的最低成本

2021-10-11 11:10:27 字數 1290 閱讀 1814

某地區經過對城鎮交通狀況的調查,得到現有城鎮間快速道路的統計資料,並提出「暢通工程」的目標:使整個地區任何兩個城鎮間都可以實現快速交通(但不一定有直接的快速道路相連,只要互相間接通過快速路可達即可)。現得到城鎮道路統計表,表中列出了任意兩城鎮間修建快速路的費用,以及該道路是否已經修通的狀態。現請你編寫程式,計算出全地區暢通需要的最低成本。

輸入格式:

輸入的第一行給出村莊數目n (1≤n≤100);隨後的n(n−1)/2行對應村莊間道路的成本及修建狀態:每行給出4個正整數,分別是兩個村莊的編號(從1編號到n),此兩村莊間道路的成本,以及修建狀態 — 1表示已建,0表示未建。

輸出格式:

輸出全省暢通需要的最低成本。

輸入樣例:

1 2 1 1

1 3 4 0

1 4 1 1

2 3 3 0

2 4 2 1

3 4 5 0

輸出樣例:

(1)分析

由於是稠密圖,所以採用prim演算法。二維陣列陣列儲存圖,陣列儲存路費,visit記錄該點是否已經加入最小生成樹中。首先以第乙個結點作為最小生成樹的初始結點,然後找出與最小生成樹中各結點權重最小邊,且該結點不在最小生成樹中(確保無環路),然後加入到最小生成樹中,更新沒有在最小生成樹中的結點和最小生成樹中各結點權重邊。迴圈上述步驟直到生成最小生成樹,過程中最小生成樹中各結點權重最小邊的權重和就是最低成本。

時間複雜度:o(n²)

(2)**及執行

#include 

using namespace std;

int main(

);//表示該點是否已經加入最小生成樹中

int n,i,j;

cin>>n;

memset(value,1,sizeof(value))

; int m=n*(n-1)/2;

for(i=1; i<=m; i++)

else

} for(i=1; i<=n; i++)

int start=1;

visit[start]

=1; for(i=1; i<=n; i++)//初始化

int num=0;

for(i=1; i<=n-1; i++)//最多n-1條路

} if(minval==99999)break;

num+=minval;

visit[start]

=1; for(j=1; j<=n; j++)}}

cout

}

1000 合併石頭的最低成本

有n堆石頭排成一排,第i堆中有stones i 塊石頭。每次移動 move 需要將連續的k堆石頭合併為一堆,而這個移動的成本為這k堆石頭的總數。找出把所有石頭合併成一堆的最低成本。如果不可能,返回 1。示例 1 輸入 stones 3,2,4,1 k 2 輸出 20 解釋 從 3,2,4,1 開始。...

暢通工程之最低成本建設問題(30 分)

這個題目就是乙個最小生成樹,如果無法構成就輸出impossible 就是構成最小生成樹的時候,每選擇一條邊然後加加,最後統計是否有n 1條就可以。最小生成樹的講解在我的其他的部落格中有提到 include include include include include include include...

5 4 暢通工程之最低成本建設問題 30分

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