遞迴迷宮問題

2021-10-14 07:09:09 字數 1675 閱讀 1210

這裡我們有乙個地圖(用二維陣列表示),小球位於地圖的起始點(也就是map[1][1]這個位置),然後小球通過進行迴圈判斷小球當前位置的上下左右是否能走,如果能走則在走之前把之前的位置標記為2,代表有路可走,如果上下左右都沒有路則把當前位置標記為3,代表無路可走,直到找到地圖的目的地,也就是map[6][5]這個位置。

1表示牆,不能走

**示範

public

class

migong

//左右全部為1

for(

int i =

0; i <

8; i++

) map[3]

[1]=

1;map[3]

[2]=

1;//列印輸出迷宮,也就是列印輸出二維陣列

system.out.

println

("地圖的情況:");

for(

int i =

0; i <

8; i++

) system.out.

println()

;}system.out.

println

("****************************************=");

//使用遞迴給小球找路

setway

(map,1,

1); system.out.

println

("小球探測過的地圖:");

for(

int i =

0; i <

8; i++

) system.out.

println()

;}}/**

* 使用遞迴給小球找路

* 約定:

* 1、map表示地圖的二維陣列

* 2、[i][j]表示出發的座標

* 3、[6][5]表示目標終點

* 4、當map[i][j]=1表示牆;map[i][j]=0表示沒有走過;map[i][j]=2表示通路可以走;map[i][j]=3表示該位置已經走過,但是走不通

* 5、走迷宮時的策略:先走下面-->再走右面-->再走上面-->再走左面,,,如果該點走不通再回溯

* @param map 表示地圖

* @param i 從哪個位置開始找

* @param j

* @return 如果找到通路路返回true

*/public

static

boolean

setway

(int

map,

int i,

int j)

else

elseif(

setway

(map,i,j+1)

)elseif(

setway

(map,i-

1,j)

)elseif(

setway

(map,i,j-1)

)else

}else}}

}

遞迴迷宮問題

直到6,5這個小球標誌的點 package com.demo public class losepath 左右全部置為1 for int i 0 i 8 i 設定擋板 map 3 1 1 map 3 2 1 system.out.println 小球開始的地圖 遍歷輸出一把 for int i 0 ...

迷宮問題遞迴演算法

include define max1 100 using namespace std int flag max1 max1 標記該位置是否走過 int jihao 記錄迷宮的通路個數 typedef struct map1 迷宮的鄰接矩陣的結構體 typedef struct sign 記錄迷宮經...

迷宮問題(遞迴)筆記

上圖是乙個 8 行 7 列的迷宮,紅色方格表示牆,不能走,目的是從某一處起點開始讓小球最終走到右下角的位置 說明 map 表示地圖 i,j 表示從地圖的哪個位置開始出發 1,1 如果小球能到 map 6 5 位置,則說明通路找到.約定 當 map i j 為 0 表示該點沒有走過 當為 1 表示牆 ...