最小生成樹Java實現,村莊最短路徑問題

2021-09-03 08:28:25 字數 1472 閱讀 2652

問題描述:

需要在n個村莊之間修建道路,給的每個村莊的座標位置,求出最小修路費用

例:給定(0,0),(0,1),(1,0),(1,0),(0.5,0.5) 輸出2.83

拙見:將輸入的點儲存到集合points中,然後將所有可行邊儲存到edges中,然後確定乙個起點(這裡將輸入的第乙個點作為起點),將該點儲存到待選點集合tarpoints中,隨後遍歷該集合將該點能與該點有關的點全都儲存到待選集合edge中。從集合中選出權值最小的一條邊儲存到解集target中,迴圈選出n-1條邊後得到解。判斷:當一條邊已經訪問則標記visited=true,當點連通後將點也標記visited=true,當一條邊沒被訪問且權值最低但是所連線得兩點已經連通則放棄該條邊。

明顯的缺點就是時間複雜度,希望得到大神的指點提撥以優化,謝謝!

設定乙個point類表示村莊點

class point implements comparable

public double getx()

public double gety()

@override

public int compareto(object o)

@override

public string tostring()

}

然後設定乙個可以表示邊的edge類(無向圖中的表示是邊這裡也引用無向圖中的表示)

class edge implements comparable

public double getweight()

public point getstart()

public point getend()

@override

public int compareto(object o)

@override

public string tostring()

}

使用prim演算法的思想:

public class minimumspanningtree 

for (int i=0;iedge = new arraylist<>();

for (int i=0;i(" + edge.getend().getx() + "," + edge.getend().gety() + ")");

weight += edge.getweight();

}system.out.println("最小權重為:" + weight);

}public static void main(string args)

}

最短路徑 最小生成樹

題目描述 n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離 輸入描述 第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路 接下來m行兩個整數,表示相連的兩個城市的編號 輸出描述 n 1行,表示0號城市到其他城...

最短網路 最小生成樹

農民約翰被選為他們鎮的鎮長!他其中乙個競選承諾就是在鎮上建立起網際網路,並連線到所有的農場。當然,他需要你的幫助。約翰已經給他的農場安排了一條高速的網路線路,他想把這條線路共享給其他農場。為了用最小的消費,他想鋪設最短的光纖去連線所有的農場。你將得到乙份各農場之間連線費用的列表,你必須找出能連線所有...

最短路徑 最小生成樹

今天覆習的時候,剛好複習的這一塊,所以就簡單做乙個備忘,寫的潦草還望大家不要介意呀 1 dijistra演算法 思路 根據點集合將其分為兩個集合,一種是已經訪問過的點s集合 代表從源點到該集合中的點的距離最小 另一種是未訪問過的u集合,然後每次從u集合中選擇節點,使得源點到改點的距離最小,並新增進s...