java 實現(xiàn)迷宮回溯算法示例詳解
用一個7 x 7的矩形表示迷宮,0和1分別表示的是通路和障礙。通過設計編寫程序找到藍色小球達到藍色旗子的路線

思路:
構建一個迷宮(用二維數(shù)組)實現(xiàn)找通路的方法findRoad()
構建二維數(shù)組不難,我們主要是要實現(xiàn)findRoad()這個方法,在實現(xiàn)這個方法前,我們需要約定好一下幾個點:小球的位置當作入口(1,1),小旗的位置當作出口(5,5)數(shù)組里數(shù)的含義分別為(0沒有走過)、(1障礙)、(2走過且為正確的路線)、(3走過且為錯誤的路線)將我們每一步的走法稱為策略:下 -> 右 -> 上 ->左
實現(xiàn)
首先構建出迷宮
public static void main(String[] args) {
//1.創(chuàng)建二維數(shù)組模擬迷宮
int[][] maze = new int[7][7];
//2.初始化迷宮
for (int i = 0; i < maze.length; i++) {
//maze[i][j]:i控制行 j:控制列
maze[0][i] = 1;//第1行都為1
maze[6][i] = 1;//最后一行都為1
maze[i][0] = 1;//第一列都為1
maze[i][6] = 1;//最后一列都為1
//其他位置的1
maze[4][1] = 1;
maze[4][2] = 1;
maze[4][3] = 1;
maze[4][4] = 1;
maze[3][4] = 1;
maze[2][3] = 1;
}
//打印迷宮
System.out.println("完成迷宮初始化:");
for (int i = 0; i < maze.length; i++) {
for (int j = 0; j < maze[i].length; j++) {
System.out.print(maze[i][j] + " ");
}
System.out.println();
}
}
然后寫findRoad()方法
* 使用遞歸回溯找通路 (5,5為出口)
* @param maze 迷宮
* @param i 從哪個位置開始找
* @param j 從哪個位置開始找
* @return 找到通路返回true 否則false
*/
public static boolean findRoad(int[][] maze, int i, int j) {
//策略:下 -> 右 -> 上 ->左
//0:沒有走過 1:障礙 2:走過且為正確的路線 3:走過且為錯誤的路線
if (maze[5][5] == 2) {//找到通路
return true;
} else {
if (maze[i][j] == 0) {
//當前點沒走過,按策略走
maze[i][j] = 2;//當前點改為2,假定能走通
if (findRoad(maze, i + 1, j)) {//向下走
return true;
} else if (findRoad(maze, i, j + 1)) {//向右走
return true;
} else if (findRoad(maze, i - 1, j)) {//向上走
return true;
} else if (findRoad(maze, i, j - 1)) {//向左走
return true;
} else {
//該點無法走通
maze[i][j] = 3;
return false;//返回到上個方法(即返回到上個點)
}
} else {
//該點為 1或2或3,無法走通,直接返回上個方法(即上個點)
return false;
}
}
}
main方法調用findRoad()方法,傳入創(chuàng)建好的迷宮,和入口點(1,1)
//mian方法中調用findRoad()方法
findRoad(maze,1,1);
//打印迷宮
System.out.println("完成路線的迷宮:");
for (int i = 0; i < maze.length; i++) {
for (int j = 0; j < maze[i].length; j++) {
System.out.print(maze[i][j] + " ");
}
System.out.println();
}
效果

到此這篇關于java 實現(xiàn)迷宮回溯算法示例詳解的文章就介紹到這了,更多相關java 實現(xiàn)迷宮回溯算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot使用Redis緩存的實現(xiàn)方法
這篇文章主要介紹了SpringBoot使用Redis緩存的實現(xiàn)方法,需要的朋友可以參考下2018-02-02
高級數(shù)據(jù)結構及應用之使用bitmap進行字符串去重的方法實例
今天小編就為大家分享一篇關于高級數(shù)據(jù)結構及應用之使用bitmap進行字符串去重的方法實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
Double.parseDouble()與Double.valueOf()的區(qū)別及說明
這篇文章主要介紹了Double.parseDouble()與Double.valueOf()的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

