DFS 騎士的旅途

2021-10-19 07:12:37 字數 793 閱讀 9740

在深度優先搜尋中,對搜尋的狀態而言,獲得乙個狀態後,同樣立即擴充套件這個狀態,但需要保證早得到的狀態較後得到擴充套件,即先入後出特性,可使用棧或遞迴。

由於深度優先搜尋並沒有先入先出的特點,所以搜尋到需要的狀態時,該狀態不再具有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...

人生的旅途

當你走在人生的道路上,你就沒有回頭路,你只有不斷地往前走,在人生的十字路口,選擇哪個岔口,完全取決於你之前所走的路,當你選擇十字路口的任何乙個方向,你都有可能迷路,能否在迷途中看到真正屬於自己的路,一切靠自己 路漫漫長,永遠不要忘了自己的本意,努力,學習,尋找這人生的目標,相信路就在前方!芭芭拉說 ...