PTA 鏢局運鏢

2021-10-05 22:41:38 字數 1288 閱讀 2372

鏢局的運鏢,就是運貨(類似現在的物流)。鏢局每到乙個新地方開展業務,都需要對運鏢途中的綠林好漢進行打點。好說話的打點費就比較低,不好說話的打點費就比較高。龍門鏢局現在有一趟鏢請你來規劃路線,已知城市的地圖,你需要選擇一些道路進行疏通,以便鏢局可以到達任意乙個城市,要求花費的銀子越少越好。

第一行有兩個數n和m,n表示有n個城市(編號從1到n),m表示有m條道路。接下來m行,每行形如「a b c」用來表示一條道路,意思是城市a到城市b連通且打點需要花費的銀子數是c。

若通過打點能抵達所有城市,則輸出最少需要花費的銀子總數。若不能抵達所有的城市則輸出「impossible」。

輸入樣例:

3 3

1 2 1

1 3 2

2 3 4

輸出樣例:

3
**分析:**是否能通過打點抵達所有城市,我理解為判斷圖是否連通。把花費的銀子當作圖的權值。我先用深搜判斷圖是否連通即是否能抵達所有城市(當訪問過的頂點數等於城市數則連通,反之則不能)。用prim演算法求最小權值和。

#include

#include

#define max 10005

typedef

struct

graph;

int visit[max]=;

int flag=0;

void

dfs(graph *g,

int i)}}

void

input

(graph *g)

}for

(i=0

;ie;i++

)return;}

int weight=0;

void

prim

(graph *g)

}for

(i=2

;i<=g->n;i++

) j++;}

weight+

=g->edges[adjvex[k]

][k]

;//printf("(%d,%d)\n",adjvex[k],k);

lowcost[k]=0

;for

(j=1

;j<=g->n;j++)}

}return;}

intmain()

prim

(g);

printf

("%d"

,weight)

;return0;

}

7 12 鏢局運鏢

假設有n個城市和m條道路,對應無向圖中的點和邊。每條路的過路費對應邊的權值。鏢局現在需要選擇一些道路進行疏通,以便邊距可以達到任意乙個城鎮,要求花費的銀子越少越好。換句話說,鏢局的要求就是用最少的邊讓圖連通 任意兩點之間可以互相到達 將多餘的邊去掉。很顯然,要想讓有n個頂點的圖連通,那麼至少需要n ...

鏢局運鏢(最小生成樹 Kruskal)

7 11 鏢局運鏢 30 分 鏢局的運鏢,就是運貨 類似現在的物流 鏢局每到乙個新地方開展業務,都需要對運鏢途中的綠林好漢進行打點。好說話的打點費就比較低,不好說話的打點費就比較高。龍門鏢局現在有一趟鏢請你來規劃路線,已知城市的地圖,你需要選擇一些道路進行疏通,以便鏢局可以到達任意乙個城市,要求花費...

啊哈演算法 鏢局運鏢(最小生成樹)

最近小哼迷上了 龍門鏢局 從恰克圖道武夷山,從張家口道老河口,從迪化道佛山,從蒙自道奉天.古代鏢局的運鏢,也就是現在的物流。鏢局每到乙個地方開展業務,都需要堆運鏢途中的綠林好漢進行打點 不給錢就不讓過路 好說話的打點費就比較低,不好說話的打點費就比較高。城鎮類似如下,頂點是城鎮編號,邊上的值表示這條...