有關迷宮回溯問題的思考

2021-10-09 04:39:27 字數 1851 閱讀 4662

目前剛剛學到這個題目,還沒有看演算法講解,先寫下自己第一時間的思考

這個問題如果我來做,

首先用二維矩陣來模擬乙個迷宮,0表示可以走,1表示不可以走,繪出迷宮輪廓
問題在於怎麼走出迷宮,

目前的思路是這樣的:

首先我會規定好它的遍歷策略,先往哪個方向看,再往哪個方向看,有路就走,走不通再說.

這樣肯定會導致一些問題,比如走的路是死胡同的情況,那怎麼處理?

或許可以說記錄一下走過的路,走的路是死路了,那我標記一下此路不通.但是在**標記,我又怎麼判斷我走的這條路不通的?

走不通的判斷方法:我走過的路做好,當我走了一遍又回到了以前的地方說明之前走的方向有問題.

做標記:在我重新回到這個位置的時候我會標記上這個位置的某個方向(我走過的有標記的方向的路)是走不通的.

這就去學習前人的先進的思想

看完前人的回溯演算法用於處理迷宮的理解

其實這個問題可以簡化成乙個重複性的問題,每一步都是乙個探路的過程

簡單理解為,乙個人探路,當此路不通的時候傳遞訊號告訴前面的自己,此路不通,並坐下標記,於是前面的自己就會選擇他路

前面的疑惑:

1. 在**標記?

當四面都走不了的時候就是走不通咯

具體方法:

牆為1,走過為2,死路為3

探路,有路就走,並標記為2

當發現此路不通(四周沒有0),立地為碑,標記為3,並告訴前面的自己,此路不通(找路 return false)

因此個人理解本例中的遞迴,其實是一種可以自我複製的方法(找路),並且可以把當前的結果(找沒找到路)反饋給上一級的一種手段

或者為了更清晰的理解,我認為他是乙個樹狀結構,這樣一下子就清晰了很多

操作**

package recursion;

public

class

migong

// 行牆

for(

int i =

0; i <

7; i++

)// 牆

map[3]

[1]=

1;map[3]

[2]=

1;setway

(map,1,

1);// 檢視

for(

int i =

0; i <

8; i++

) system.out.

println()

;}}/**

* * @param map 地圖

* @param i 位置點

* @param j

* @return 找到路沒有

*/public

static

boolean

setway

(int

map,

int i,

int j)

// 當前是個假路,直接報錯

if(map[i]

[j]!=0)

//能走的路

else

// 向右找

elseif(

setway

(map, i, j +1)

)// 向上找

elseif(

setway

(map, i -

1, j)

)// 向左找

elseif(

setway

(map, i, j -1)

)// 沒找到

else}}

}

迷宮回溯問題

概念介紹 請看圖,上圖為乙個迷宮,1為阻擋區間,也就是說不能走。0為可踏足地帶,我們的目標是從a點出發,走到b點,則任務完成!為了方便大家理解,我們只在 3,1 以及 3,2 這兩個位置設定阻擋位。實現 先明確實現思路 假設我們在a 1,1 位置,我們能做的操作是嘗試向下 向右 向上或者向左走一步。...

迷宮問題思考

還有,地牢的迷宮應該是不完美的。完美 的迷宮意味著兩點之間只有唯一的一條通路。所有的走廊分布得就像一棵樹,它有樹叉,但是中間沒有交集。而 不完美 的迷宮則有著可迴圈的通路 從 a 到 b 有多個可選通路。不完美 的迷宮是遊戲機制的需要,而不是技術上的需求。你可以造乙個基於 完美 的迷宮的 rogue...

回溯法 迷宮問題

1.首先我們需要自定義乙個迷宮 左上角為入口,右下角為出口,0為路,1為牆 用二維陣列儲存 2.我們在走迷宮之前,首先要確立乙個走的順序,即貪心準則,我們首先試探的方向應該是下,然後是右,上,左 為了確保每乙個格仔都有上下左右,我們需要給我們的迷宮加上一圈牆8 8,變成10 10 3.當我們在乙個格...