回溯問題三 迷宮問題

2021-09-02 05:25:53 字數 1016 閱讀 7638

題意:

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個字元,...