日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java dijkstra算法代码_[转载]Java实现dijkstra算法: 地图中任意起点寻找最佳路径...

發布時間:2025/3/12 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java dijkstra算法代码_[转载]Java实现dijkstra算法: 地图中任意起点寻找最佳路径... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在復習java,下學期要用,寫這個練手. ?技術較粗糙,見諒.

代碼里用的是這幅地圖,根據實際情況更改,在addNode方法中

這個是運行結果,起點和終點在 運行wrap(String qidian, String zhongdian) 時定義

代碼:

import java.util.*;

public class Dijkstra {

ArrayList Collection = new

ArrayList(); //儲存所有的點

ArrayList Route = new

ArrayList(); //記錄路徑

ArrayList Waiting = new

ArrayList();//此輪候選的點

String current = null;

int length = 0;

boolean addNodes(){

Collection.add(new Node("A","B",20));

Collection.add(new Node("A","D",80));

Collection.add(new Node("A","G",90));

Collection.add(new Node("B","F",10));

Collection.add(new Node("C","F",50));

Collection.add(new Node("C","H",20));

Collection.add(new Node("C","D",10));

Collection.add(new Node("D","G",20));

Collection.add(new Node("D","C",10));

Collection.add(new Node("E","B",50));

Collection.add(new Node("E","G",30));

Collection.add(new Node("F","C",10));

Collection.add(new Node("F","D",40));

Collection.add(new Node("G","A",20));

return true;

}

void setNext(String nt){

current = nt;

}

void update(ArrayList

wl){

ArrayList update = new

ArrayList();

for(Node a:wl){

for(Node b:wl){

if(a.getDest() ==

b.getDest()&&a.getDist()

update.add(b);

}}}

for(Node c:update){

wl.remove(c);

}

}

void Remove(ArrayList

coll,String nt){

ArrayList move = new

ArrayList();

for(Node a:coll){

if(nt == a.getDest())

move.add(a);

}

for(Node a:move){

if(coll.contains(a))

coll.remove(a);

}

}

void linkRoute(ArrayList

rt){

ArrayList linkroute = new

ArrayList();

int last = rt.size()-1;

for(int i=rt.size()-2;i>-1;i--){

if(rt.get(last).getDep() != rt.get(i).getDest()){

linkroute.add(rt.get(i));

}else if(rt.get(last).getDep() == rt.get(i).getDest()){

last = i;

}

}

for(Node a:linkroute){

rt.remove(a);

}

}

void toWait(String nt){

Remove(Collection,current);

for(Node a:Collection){

if(nt == a.getDep()){

Waiting.add(new

Node(a.getDep(),a.getDest(),a.getDist()+length));

}

}

for(Node b:Waiting){

if(Collection.contains(b))

Collection.remove(b);

}

update(Waiting);

}

boolean selectNext(ArrayList

wl){

if(wl.size() == 0){

System.out.println("done");

return false;

}else if(wl.size() == 1){

current = wl.get(0).getDest();

length = ?wl.get(0).getDist();

Route.add(Route.size(), wl.get(0));

wl.remove(wl.get(0));

}else{

Node s = wl.get(0);

for(Node a:wl){

if(a.getDist()

s = a;

}

}

current = s.getDest();

length = ?s.getDist();

Route.add(Route.size(), s);

wl.remove(s);//將waiting list中的這一點刪去

}

return true;

}

public void wrap(String start, String stop){

current = start;

if(addNodes()){

for(int i=0;;i++){

if(stop == current){

//Route.add();

break;}

toWait(current);

if(selectNext(Waiting))

continue;

else

break;

}

if(Route.size()!=0&&Route.get(Route.size()-1).getDest()==stop){

linkRoute(Route);

System.out.print(Route.get(0).getDep()+" ->

");

for(Node a:Route){

System.out.print(a.getDest()+" ");

}

System.out.print("distance:

"+Route.get(Route.size()-1).getDist()+"n");

}

else

System.err.println("no fucking way");

}

}

public static void main(String[] args){

new Dijkstra().wrap("A","G");

}

}

class Node{

String From;

String To;

int distance;

Node(String f, String t, int d){

this.From = f;

this.To = t;

this.distance = d;

}

public String getDep(){

return this.From;

}

public String getDest(){

return this.To;

}

public int getDist(){

return this.distance;

}

}

總結

以上是生活随笔為你收集整理的java dijkstra算法代码_[转载]Java实现dijkstra算法: 地图中任意起点寻找最佳路径...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。