當前位置:首頁 » 編程語言 » java最短路徑

java最短路徑

發布時間: 2023-11-25 20:24:24

⑴ 求java實現矩陣圖上任意兩點的最短路徑源碼

我用的是遞歸調用方法,有個小問題就是在列印步數的時候是返向的,原因是就是程序不斷的調用自己,到最後判斷基值位準退出調用。這才開始從棧里取出方法進行執行的原因。

代碼欣賞:

publicstaticintstep=1;

=newStringBuffer();

publicstaticint[][]maze={{1,1,1,1,1,1,1,1,1,1,1},

{1,0,1,0,1,0,0,0,0,0,1},

{1,0,1,0,0,0,1,0,1,1,1},

{1,0,0,0,1,0,1,0,0,0,1},

{1,0,1,1,0,0,1,0,0,1,1},//0代表可以通過,1代表不可通過

{1,0,1,0,1,1,0,1,0,0,1},

{1,0,0,0,0,0,0,0,1,0,1},

{1,0,1,0,1,0,1,0,1,0,1},

{1,0,0,1,0,0,1,0,1,0,1},

{1,1,1,1,1,1,1,1,1,1,1}};

publicstaticvoidmain(String[]args){

inti,j;//循環記數變數

Sample.way(1,1);//二維數組起始值從下標1,1開始

System.out.println("起點從坐標x=1,y=1開始");

System.out.println("終點坐標是x=8,y=9結束");

System.out.println("這是迷宮圖表");

System.out.println("012345678910");

System.out.println("+---+---+---+---+---+---+---+---+---+---+---+---+---+");

for(i=0;i<10;i++){

System.out.print(""+i+"‖");

for(j=0;j<11;j++)

System.out.print("-"+maze[i][j]+"-‖");

System.out.println("");

System.out.println("+---+---+---+---+---+---+---+---+---+---+---+---+---+");

}

//列印顯示步數

System.out.print(printStep.toString());

}

publicstaticbooleanway(intx,inty){

if(maze[8][9]==2)//代表遞歸終止條件(也就是當走出出口時標記為2)

returntrue;

else{

if(maze[y][x]==0){

maze[y][x]=2;

/*

*下面if判斷條件代表當前坐標為基點,

*根據判斷對當前位置進行遞歸調用:如:

*往上、往右上、往右、往右下、往下、

*往左下、往左、往左上的坐標是否可走,

*判斷是否可走的返回條件是:

*2代表可通過、1代表不能通過、3表示已經走過,但是未能走通。

*/

if(way(x,y-1)){

printStep.append("第"+step+"步的所走的位置是x="+x+"y="+y+" ");

step++;

returntrue;

}elseif(way(x+1,y-1)){

printStep.append("第"+step+"步的所走的位置是x="+x+"y="+y+" ");

step++;

returntrue;

}elseif(way(x+1,y)){

printStep.append("第"+step+"步的所走的位置是x="+x+"y="+y+" ");

step++;

returntrue;

}elseif(way(x+1,y+1)){

printStep.append("第"+step+"步的所走的位置是x="+x+"y="+y+" ");

step++;

returntrue;

}elseif(way(x,y+1)){

printStep.append("第"+step+"步的所走的位置是x="+x+"y="+y+" ");

step++;

returntrue;

}elseif(way(x-1,y+1)){

printStep.append("第"+step+"步的所走的位置是x="+x+"y="+y+" ");

step++;

returntrue;

}elseif(way(x-1,y)){

printStep.append("第"+step+"步的所走的位置是x="+x+"y="+y+" ");

step++;

returntrue;

}elseif(way(x-1,y-1)){

printStep.append("第"+step+"步的所走的位置是x="+x+"y="+y+" ");

step++;

returntrue;

}else{

maze[y][x]=3;

returnfalse;

}

}else

returnfalse;

}

}

復制代碼前需要樓主自己創建個類

Sample.way(1,1);這句代碼是我的類的靜態調用,改下XXXXX.way(1,1);

XXXXX代表你創建的類。

下面是這個程序運行後的截圖

⑵ 求java演算法源代碼 求出汽車從起點S出發到達終點T的一條行駛路程最短的路線。

呵呵,你如果最短路徑是m*n的這個前提就好算;如果最短不一定是m*n的話就成了一個迷宮問題同樣求指點啊

⑶ 用java語言求最短路徑

最短路徑就是敲代碼。 這個東西行業公認,沒有比敲代碼學語言更加快的路了。
如果是單純感興趣可以買兩本書自學 什麼thinkinjava之類的,開始肯定看不懂的,誰開始都看不懂,摸索著來,時間長了就理解了。如果有其它語言基礎學起來就快多了,因為語言這種東西,除了語法不一樣,邏輯都是一樣的。
如果是工作需要什麼的,可以找個培訓啥的。當然前提你有錢。
最後順帶吐個槽,捷徑好找的話,程序員這工作就不值錢了。

⑷ java中如何鄰接矩陣遍歷最短路徑長度

packagetest;
importjava.util.ArrayList;
import清廳java.util.List;
/**
*java-用鄰接矩陣求圖的最短路徑、最長途徑。弗洛伊德演算法
*/
publicclassFloydInGraph{
privatestaticintINF=Integer.MAX_VALUE;
privateint[][]dist;
privateint[][]path;
privateList<Integer>result=newArrayList<Integer>();
publicFloydInGraph(intsize){
this.path=newint[size][size];
this.dist=newint[size][size];
}
publicvoidfindPath(inti,intj){
intk=path[i][j];
答如隱if(k==-1)return;
findPath(i,k);
result.add(k);
findPath(k,j);
}
publicvoidfindCheapestPath(intbegin,intend,int[][]matrix){
floyd(matrix);
result.add(begin);
findPath(begin,end);
result.add(end);
}
publicvoidfloyd(int[][]matrix){
intsize=matrix.length;
for(inti=0;i<size;i++){
for(intj=0;j<size;j++){
path[i][j]=-1;
dist[i][j]=matrix[i][j];
}
}
for(intk=0;k<size;k++){
for(inti=0;i<size;i++){
for(intj=0;j<size;j++){
if(dist[i][k]!=INF&&
dist[k][j]!=INF&&
橡伍dist[i][k]+dist[k][j]<dist[i][j]){//dist[i][k]+dist[k][j]>dist[i][j]-->longestPath
dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=k;
}
}
}
}

}
publicstaticvoidmain(String[]args){
FloydInGraphgraph=newFloydInGraph(5);
int[][]matrix={
{INF,30,INF,10,50},
{INF,INF,60,INF,INF},
{INF,INF,INF,INF,INF},
{INF,INF,INF,INF,30},
{50,INF,40,INF,INF},
};
intbegin=0;
intend=4;
graph.findCheapestPath(begin,end,matrix);
List<Integer>list=graph.result;
System.out.println(begin+"to"+end+",thecheapestpathis:");
System.out.println(list.toString());
System.out.println(graph.dist[begin][end]);
}
}

熱點內容
伺服器網卡硬體型號怎麼看 發布:2024-05-19 18:36:41 瀏覽:665
修改pve伺服器ip 發布:2024-05-19 18:31:52 瀏覽:468
微信密碼忘記了如何取出裡面的錢 發布:2024-05-19 18:27:35 瀏覽:329
vs2005反編譯 發布:2024-05-19 18:26:34 瀏覽:363
ug啟動語言腳本 發布:2024-05-19 18:25:57 瀏覽:874
緩存伺服器技術 發布:2024-05-19 18:25:56 瀏覽:885
androidlistview橫向 發布:2024-05-19 18:21:02 瀏覽:704
多看ftp 發布:2024-05-19 18:11:31 瀏覽:543
給定一個演算法 發布:2024-05-19 17:50:08 瀏覽:864
戀愛生物種離線緩存 發布:2024-05-19 17:49:15 瀏覽:579