DFS BFS 搜尋總結

2021-08-04 02:29:30 字數 640 閱讀 4831

做了好多天的搜尋,今天來總結下。

dfs 與 bfs

dfs:深度優先搜尋:利用棧這種資料結構來實現(利用遞迴便於實現,但是效率較低),找到的第乙個解不一定是最優解,只是先序遍歷最早的可行解。

bfs:廣度優先搜尋:利用佇列這種資料結構來實現,找到的第乙個解經常都是最優解(如迷宮的最短路徑),但是不常用來求所有解(重複的次優解常常都被剪枝剪掉了)。

void dfs(int y)//dfs第y行

{ if(y==n)

cnt++;

for(int i=0;i

bfs的演算法時間複雜度要比dfs小,而且bfs是尋找到目標狀態就完成,而dfs是一直尋找到目標狀態的所有方法,所以二者各有應用。

同學告訴我:bfs比較穩健,dfs在「迷宮」種一直找來找去,很容易造成死迴圈,而且需要剪枝

例:跳馬問題問是否可以從起始點到結束點  bfs的演算法較快

單個的從起始狀態到目標狀態  bfs

但是涉及到了搜尋到的個數問題這時候用 dfs

多個從起始狀態到目標狀態是否完成  dfs

涉及到搜尋問題很多將會採用方向陣列,陣列的定義根據棋盤問題的不同裁定,

1. 正常的上下左右移動

2.跳馬的8個方向移動 

3.連通部分的8個方向移動

DFS BFS搜尋 題目

這篇博主寫的是圖的深搜 圖的dfs附 圖的深度優先遍歷 出處 一條魚 2011 12 26 include include struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int vis...

DFS BFS 搜尋訓練

hdu 1016 include include include using namespace std int prime 40 vis 40 num 40 n void checkprime void dfs int i for int c 2 c n c int main return 0 p...

DFS BFS 搜尋基礎

首先深搜 先看輸入格式 5 0 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 第一行輸入乙個數n,接下來輸入n n的數字矩陣,0代表房間,1代表牆,每個位置都可以往上下左右四個方向走 題意非常簡單,就是求以左上角為出發點所能到達的最多的房間數。inc...