題意:
0 0 0 0 1
1 0 0 0 1
1 0 1 0 1
1 0 1 1 1
1 0 0 1 1
上面矩陣表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,現在編寫程式從(0,0)開始走從最後一行有出口處走出
**解題方法:**回溯法,與全排列、地圖塗色如出一轍,回溯與遞迴聯絡十分緊密,遞迴的過程包括正向遞迴呼叫以及反向回退,一般我們使用遞迴大多數情況下正向遞迴呼叫即可解決,而回溯是指,除了正向遞迴呼叫,在回退時候我們也要處理,一般這個處理就是對正向遞迴呼叫的「恢復」,具體問題還是以具體問題去理解
c**:
#include
#define n 5
//迷宮大小
int maze[n]
[n]=,,
,,};
int direction[4]
[2]=
,,,}
;//四個方向,上下左右,每個方向x、y的增量
int count =0;
//記錄方案數
intcheck
(int i,
int j)
//判斷下一步是不是通路
}return0;
}void
find
(int ci,
int cj)
printf
("\n");
} maze[ci]
[cj]=0
;}else}}
}int
main
(void
)printf
("\n");
}printf
("\n");
find(0
,0);
printf
("\n\n共%d種方案!\n"
,count)
;return0;
}
迷宮回溯問題
概念介紹 請看圖,上圖為乙個迷宮,1為阻擋區間,也就是說不能走。0為可踏足地帶,我們的目標是從a點出發,走到b點,則任務完成!為了方便大家理解,我們只在 3,1 以及 3,2 這兩個位置設定阻擋位。實現 先明確實現思路 假設我們在a 1,1 位置,我們能做的操作是嘗試向下 向右 向上或者向左走一步。...
回溯法 迷宮問題
1.首先我們需要自定義乙個迷宮 左上角為入口,右下角為出口,0為路,1為牆 用二維陣列儲存 2.我們在走迷宮之前,首先要確立乙個走的順序,即貪心準則,我們首先試探的方向應該是下,然後是右,上,左 為了確保每乙個格仔都有上下左右,我們需要給我們的迷宮加上一圈牆8 8,變成10 10 3.當我們在乙個格...
迷宮問題 回溯法
描述 給乙個20 20的迷宮 起點座標和終點座標,問從起點是否能到達終點。輸入 多個測例。輸入的第一行是乙個整數n,表示測例的個數。接下來是n個測例,每個測例佔21行,第一行四個整數x1,y1,x2,y2是起止點的位置 座標從零開始 x1,y1 是起點,x2,y2 是終點。下面20行每行20個字元,...