資料結構 遞迴思想及遞迴實現迷宮問題

2021-10-06 12:08:40 字數 3162 閱讀 8525

遞迴:就是自己呼叫自己,然後一層層返回

乙個簡單的例子:

列印問題:

public

static

void

main

(string[

] args)

//列印問題

我們可以分析這個程式的執行過程:程式的方法在虛擬機器的棧空間執行

這就是遞迴的過程

有這樣乙個迷宮,從起點到終點,紅色是牆,黃色的是路,可以走,一次走一格

如何實現?

用陣列模擬迷宮,0表示路,1表示牆

111

1111

1000

0011

0001

0111

1010

1101

0101

1011

1011

0000

0111

1111

1

約定:0 為該點沒有走過 ;1 為牆;2為通路可以走;3表示該位置已經走過,但是走不通

/**

* @param map 迷宮地圖

* @param i,j 開始位置(i,j)

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

** 使用遞迴回溯找到迷宮的路,設定終點為(6,5)

* 約定:0 為該點沒有走過 ;1 為牆;2為通路可以走;3表示該位置已經走過,但是走不通

* 策略:走迷宮時,策略為:下=》右=》上=》左,如果走不通再回溯

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

}}

測試:

public

static

void

main

(string[

] args)

//左右為1

for(

int i =

1;i <

7;i++

)//設定擋板

map[3]

[1]=

1;map[3]

[2]=

1;map[2]

[4]=

1;map[3]

[4]=

1;map[4]

[4]=

1;map[4]

[2]=

1;map[5]

[4]=

1;map[5]

[3]=

1;map[5]

[2]=

1;for(

int i =

0;i <

8;i++

) system.out.

println()

;}setway

(map,1,

1); system.out.

println

("===完成後的迷宮===");

從結果看到,迷宮程式走的路線是:

一路按照策略走

我們上面的策略是下右上左,當然還有其他策略

如上右下左等等,實現方法就是將上面的ifelse語句順序調換即可

/**

* @param map

* @param i

* @param j

* @return

** 修改策略的找路徑:上=》右=》下=》左

*/public

static

boolean

setway2

(int

map ,

int i,

int j)

else

//向右走

elseif(

setway2

(map,i,j+1)

)//向下走

elseif(

setway2

(map,i+

1,j)

)//向左走

elseif(

setway2

(map,i,j-1)

)else

}else

}}

這樣再測試就可以看到:

策略看自己的使用

乙個很複雜的迷宮問題,通過遞迴很簡單就解決了

遞迴是乙個很重要、很有用的思想,很多問題都可以通過遞迴解決

資料結構 迷宮(遞迴)

如下 include include using namespace std define max row 10 巨集定義行 define max col 10 巨集定義列 struct seat int x int y class maze void printmaze 列印迷宮 cout end...

資料結構 遞迴思想

一 漢諾塔 include stdio.h include stdlib.h void move int n,char x,char y,char z else int main 二 斐波那契數列 include stdio.h define maxsize 40 void iterfib void...

資料結構16 遞迴 迷宮問題

再把左右兩行都設定為1 for int i 0 i 設定擋板 map 3 1 1 map 3 2 1 輸出地圖 代表二維陣列的行數 for int i 0 i system.out.println system.out.println 小球走過的路線 使用遞迴回溯給小球找路 setway map,1...