用回溯遞迴演算法解決走迷宮問題

2021-10-07 02:40:26 字數 1005 閱讀 6879

迷宮是由許多小方格構成的矩形,在每個小方格中有的是牆,有的是路,走迷宮就是從乙個小方格沿上下左右四個方向到臨近的方格,當然不能穿牆。設迷宮的入口是在左上角(1,1),出口是右下角(8,8)根據給定的迷宮,找出一條從入口到出口的路徑。

演算法設計思路:從入口開始廣度優先搜尋所有可到達的方格入隊,再擴充套件隊首方格,直到搜尋到出口時演算法結束。

以0表示路,-1表示牆,-2標記死胡同,dep標記走過的步數。

下面直接上**,可能會更好理解。

#include

int maze[8]

[8]=

,,,,

,,,}

,//以二維陣列maze[8][8]儲存整個迷宮

fx[4]=

, fy[4]

=;//fx和fy一起就可以實現在陣列裡進行上下左右四種變化

int i,j,k;

int dep;

void

out()}

//用於輸出結果的函式

intcheck

(int i,

int j,

int k)

//check函式用於檢查該方格是否是可行的路線,可行就返回1否則返回0

void

search

(int i,

int j)

maze[i]

[j]=-2

;//如果發現四周沒路了,就是走到死胡同了,此時就把死胡同的路線標記為-2

dep--

;//在標記死胡同的同時search找的其實是後退的路,所以步數dep要自減

}int

main()

注意雖然圖上是從(1,1)到(8,8),但是在陣列裡是從(0,0)到(7,7)的。

演算法框架參考的是《演算法設計與分析》課本上的內容,在此基礎上有微調和改進。

遞迴解決走迷宮問題

public static void main string args for int i 0 i 7 i maze 3 1 1 maze 3 2 1 maze 1 2 1 maze 2 2 1 for int i 0 i 8 i system.out.println if mazegame maz...

遞迴演算法 迷宮回溯問題

package com.czn.recursion public class migong for int i 0 i 8 i map 3 1 1 map 3 2 1 for int i 0 i 8 i system.out.println boolean setway setway map,1,1...

C 用回溯遞迴解決「八皇后」問題

在很早以前,我曾經用c 寫過一篇使用回溯法來生成隨機數獨的部落格。這一次,考慮到這是一系列關於c 的部落格,所以利用c 的一些特點,來解決著名的 八皇后 問題。在迭代過程中,不停進行嘗試,如果不行則退回來,換一條路走,這就是 回溯法 的基本思想。在本例中,基本演算法如下 先遍歷棋盤的每一行,在每一行...