迷宮是由許多小方格構成的矩形,在每個小方格中有的是牆,有的是路,走迷宮就是從乙個小方格沿上下左右四個方向到臨近的方格,當然不能穿牆。設迷宮的入口是在左上角(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 的一些特點,來解決著名的 八皇后 問題。在迭代過程中,不停進行嘗試,如果不行則退回來,換一條路走,這就是 回溯法 的基本思想。在本例中,基本演算法如下 先遍歷棋盤的每一行,在每一行...