迷宮問題(遞迴)筆記

2021-10-10 02:59:23 字數 2200 閱讀 5228

上圖是乙個 8 行 7 列的迷宮, 紅色方格表示牆,不能走, 目的是從某一處起點開始讓小球最終走到右下角的位置

說明:

map 表示地圖

i,j 表示從地圖的哪個位置開始出發 (1,1)

如果小球能到 map[6] [5] 位置,則說明通路找到.

約定: 當 map[i] [j] 為 0 表示該點沒有走過 當為 1 表示牆 ; 2 表示通路可以走 ; 3 表示該點已經走過,但走不通

public

class

migong

// 左右全部置為 1

for(

int i =

0; i <

8; i++

)//設定擋板, 1 表示

map[3]

[1]=

1;map[3]

[2]=

1;// map[1][2] = 1;

// map[2][2] = 1;

// 輸出地圖

system.out.

println

("地圖的情況");

for(

int i =

0; i <

8; i++

) system.out.

println()

;}//使用遞迴回溯給小球找路

setway

(map,1,

1);//setway2(map, 1, 1);

//輸出新的地圖, 小球走過,並標識過的遞迴

system.out.

println

("小球走過,並標識過的 地圖的情況");

for(

int i =

0; i <

8; i++

) system.out.

println()

;}}//使用遞迴回溯來給小球找路

//說明

//1. map 表示地圖

//2. i,j 表示從地圖的哪個位置開始出發 (1,1)

//3. 如果小球能到 map[6][5] 位置,則說明通路找到.

//4. 約定: 當 map[i][j] 為 0 表示該點沒有走過 當為 1 表示牆 ; 2 表示通路可以走 ; 3 表示該點已經走過,但是走不通

//5. 在走迷宮時,需要確定乙個策略(方法) 下->右->上->左 , 如果該點走不通,再回溯

/** *

* @param map 表示地圖

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

* @param j

* @return 如果找到通路,就返回 true, 否則返回 false

*/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}}

}

執行結果

地圖的情況

1 1 1 1 1 1 1

1 0 0 0 0 0 1

1 0 0 0 0 0 1

1 1 1 0 0 0 1

1 0 0 0 0 0 1

1 0 0 0 0 0 1

1 0 0 0 0 0 1

1 1 1 1 1 1 1

小球走過,並標識過的 地圖的情況

1 1 1 1 1 1 1

1 2 0 0 0 0 1

1 2 2 2 0 0 1

1 1 1 2 0 0 1

1 0 0 2 0 0 1

1 0 0 2 0 0 1

1 0 0 2 2 2 1

1 1 1 1 1 1 1

遞迴迷宮問題

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

遞迴迷宮問題

直到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 記錄迷宮經...