hzwer上的,知道是用克魯斯卡爾,但是思路還是自己猜出來的
思路:感覺就是猜出來的,
因為所有的點集之間的距離是他們所含點對之間的最短距離,對於例題中的圖,想像一下,在這幾個點集之間相互連邊
就是連最短的邊,他們就會聯通,實際上本題就是,把所有的點按最小距離連起來,找到最大的k-1條邊,把他們刪掉
,其中這些邊最小的距離就是所求的距離。
一共要插入n-1條邊,找最大的k-1條邊中最小的邊,就是第(n-1)-(k-1)+1長邊
#include#include#include#includeusing namespace std;
struct aa
{ int u,v;
double dis;
bool operator
{ return dis
常用十大演算法(七) 克魯斯卡爾演算法
部落格說明 介紹最小生成樹 修路問題 思路問題一 排序問題二 判斷迴路 實現 package com.atguigu.kruskal import j a.util.arrays public class kruskalcase int matrix b c d e f g kruskalcase ...
克魯斯卡爾演算法
測試輸入包含若干測試用例。每個測試用例的第1行給出評估的道路條數 n 村莊數目m 100 隨後的 n 行對應村莊間道路的成本,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間道路的成本 也是正整數 為簡單起見,村莊從1到m編號。當n為0時,全部輸入結束,相應的結果不要輸出。對每個測試用例,在...
克魯斯卡爾演算法
設n v,是連通網 1 令最小生成樹的初始狀態為只有n個頂點而無邊的非連通圖t v,圖中每個頂點自成乙個連通分量 2 在e中選擇代價最小的邊,若該邊依附的頂點落在t中不同的連通分量上,則將此邊加入到t中,否則捨去此邊而選擇下一條代價最小的邊 3 反覆執行第2 步,直至t中所有頂點都在同一連通分量上為...