當前位置:編程學習大全網 - 源碼下載 - 在java實現矩陣上求任意兩點的最短路徑源代碼

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

我用的是遞歸調用的方法,有個小問題就是打印步驟的時候是向後的,因為程序壹直在調用自己,最後決定基礎級退出調用。這就是為什麽我們開始從堆棧中取出方法來執行。

代碼欣賞:

公共?靜電?int?壹步?=?1;

公共?靜電?StringBuffer?printStep?=?新的?string buffer();

公共?靜電?int[][]?迷宮?={{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?}?};

公共?靜電?作廢?main(String[]?args)?{

int?我,?j;?//循環計數變量

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

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

System.out.println("終點坐標是什麽?x?=?8,?y?=?9 End”);

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

system . out . println(" 0123456789?10");

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

對於(我?=?0;?我?& lt?10;?i++){

System.out.print("??+?我?+?"‖");

對於(j?=?0;?j?& lt?11;?j++)

System.out.print("-"?+?迷宮[i][j]?+?"-‖");

system . out . println(" ");

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

}

//打印並顯示步數

system . out . print(print step . tostring());

}

公共?靜電?布爾?way(int?x,?int?y){

if(迷宮[8][9]?==?2)//代表遞歸終止條件(即出出口時,標記為?2)

回歸?真實;

否則{

if(迷宮[y][x]?==?0){

迷宮[y][x]?=?2;

/*

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

*?根據判斷遞歸調用當前位置,例如:

*?向上,向右,向右,向右,向下,

*?左下,左中和左上的坐標是否可以去,

*?判斷能不能去的回報條件是:

*?2表示是,1表示否,3表示通過了,但未能通過。

*/

如果(方式(x,y?-?1)){

PrintStep.append("第壹個?"?+?壹步?+?"?臺階的位置是什麽?x?=?"?+?x?+?"?y?=?"?+?y?+?" \ n ");

step++;

回歸?真實;

}別的?如果(方式(x?+?1,?y?-?1)){

PrintStep.append("第壹個?"?+?壹步?+?"?臺階的位置是什麽?x?=?"?+?x?+?"?y?=?"?+?y?+?" \ n ");

step++;

回歸?真實;

}別的?如果(方式(x?+?1?,?y)){

PrintStep.append("第壹個?"?+?壹步?+?"?臺階的位置是什麽?x?=?"?+?x?+?"?y?=?"?+?y?+?" \ n ");

step++;

回歸?真實;

}別的?如果(方式(x?+?1,?y?+?1)){

PrintStep.append("第壹個?"?+?壹步?+?"?臺階的位置是什麽?x?=?"?+?x?+?"?y?=?"?+?y?+?" \ n ");

step++;

回歸?真實;

}別的?如果(方式(x,y?+?1)){

PrintStep.append("第壹個?"?+?壹步?+?"?臺階的位置是什麽?x?=?"?+?x?+?"?y?=?"?+?y?+?" \ n ");

step++;

回歸?真實;

}別的?如果(方式(x?-?1,?y?+?1)){

PrintStep.append("第壹個?"?+?壹步?+?"?臺階的位置是什麽?x?=?"?+?x?+?"?y?=?"?+?y?+?" \ n ");

step++;

回歸?真實;

}別的?如果(方式(x?-?1,?y)){

PrintStep.append("第壹個?"?+?壹步?+?"?臺階的位置是什麽?x?=?"?+?x?+?"?y?=?"?+?y?+?" \ n ");

step++;

回歸?真實;

}別的?如果(方式(x?-?1,?y?-?1)){

PrintStep.append("第壹個?"?+?壹步?+?"?臺階的位置是什麽?x?=?"?+?x?+?"?y?=?"?+?y?+?" \ n ");

step++;

回歸?真實;

}否則{

迷宮[y][x]?=?3;

回歸?假的;

}

}否則

回歸?假的;

}

}

復制代碼前需要樓主創建壹個嗎?班級?

Sample.way(1,?1);這段代碼是我的類的靜態調用。改成XXXXX.way(1,?1);

XXXXX代表您創建的類。

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

  • 上一篇:順勢指數源代碼
  • 下一篇:愛情之樹告訴孩子什麽?
  • copyright 2024編程學習大全網