在深度優先搜尋中,對搜尋的狀態而言,獲得乙個狀態後,同樣立即擴充套件這個狀態,但需要保證早得到的狀態較後得到擴充套件,即先入後出特性,可使用棧或遞迴。
由於深度優先搜尋並沒有先入先出的特點,所以搜尋到需要的狀態時,該狀態不再具有bfs那樣的某種最優的特性。因此,使用dfs常常是為了知道問題是否有解,而不使用dfs求解最優解問題。
騎士按照「日」字規則行走。騎士的世界就是他生活的8*8棋盤
找到一條能夠讓騎士遍歷棋盤上所有點的路徑。騎士可以在任何一塊方塊上開始或結束他的旅行。
搜尋狀態三元組(x,y,step),(x,y)是當前點的座標,step是從起點走到該點經過的步數。需要搜尋到的最終目標狀態為(x,y,step),其中step=p*q,即經過的步數等於棋盤的格數。需要記錄棋盤中的某點騎士是否曾經訪問過,防止重複經過同一點。
#include#include#include#includeusing namespace std;
const int maxn=30;
int p,q;//棋盤引數
bool visit[maxn][maxn];//標記矩陣
int direction[8][2]=,,,,,,,
};bool dfs(int x,int y,int step,string ans)
}return false;
}int main()
return 0;
}
dfs 騎士遊歷I
如下圖所示有m n n,m 15 乙個棋盤,在棋盤左下角的a 1,1 點,有乙個中國象棋 馬 並約定馬走的規則 走日字 只能向右走。兩個數,n,m 最少步數 9 810 include include include using namespace std const int dx 5 const ...
POJ2488 騎士遊歷 DFS
題目意思是在乙個國際棋盤裡,判斷馬能否不重複的走過所有格,並記錄下其中按字典序排列的第一種路徑。dfs方法解決,由於是字典順序,所以搜尋方向要嚴格規定 本題錯了幾次,原因是memset沒有使用正確,此函式的第三個引數是按位元組的單位,所以陣列長度還要乘以sizeof type 160k 63ms c...
人生的旅途
當你走在人生的道路上,你就沒有回頭路,你只有不斷地往前走,在人生的十字路口,選擇哪個岔口,完全取決於你之前所走的路,當你選擇十字路口的任何乙個方向,你都有可能迷路,能否在迷途中看到真正屬於自己的路,一切靠自己 路漫漫長,永遠不要忘了自己的本意,努力,學習,尋找這人生的目標,相信路就在前方!芭芭拉說 ...