鏢局的運鏢,就是運貨(類似現在的物流)。鏢局每到乙個新地方開展業務,都需要對運鏢途中的綠林好漢進行打點。好說話的打點費就比較低,不好說話的打點費就比較高。龍門鏢局現在有一趟鏢請你來規劃路線,已知城市的地圖,你需要選擇一些道路進行疏通,以便鏢局可以到達任意乙個城市,要求花費的銀子越少越好。
第一行有兩個數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 分 鏢局的運鏢,就是運貨 類似現在的物流 鏢局每到乙個新地方開展業務,都需要對運鏢途中的綠林好漢進行打點。好說話的打點費就比較低,不好說話的打點費就比較高。龍門鏢局現在有一趟鏢請你來規劃路線,已知城市的地圖,你需要選擇一些道路進行疏通,以便鏢局可以到達任意乙個城市,要求花費...
啊哈演算法 鏢局運鏢(最小生成樹)
最近小哼迷上了 龍門鏢局 從恰克圖道武夷山,從張家口道老河口,從迪化道佛山,從蒙自道奉天.古代鏢局的運鏢,也就是現在的物流。鏢局每到乙個地方開展業務,都需要堆運鏢途中的綠林好漢進行打點 不給錢就不讓過路 好說話的打點費就比較低,不好說話的打點費就比較高。城鎮類似如下,頂點是城鎮編號,邊上的值表示這條...