深度優先搜尋按照深度優先的方式進行搜尋,通俗點就是「一條路走到黑」。注意,這裡的搜尋不是指的我們平時在檔案或者網路上查詢的某些資訊,搜尋是一種窮舉的方式,把所以可行的方案都列舉出來,不斷去嘗試,直到找到問題的解。
深度優先搜尋和遞迴的區別是:深度優先搜尋是一種演算法,注重的是思想;遞迴是一種基於程式語言的實現方式。深度優先搜尋可以用遞迴實現,也就是說遞迴是我們用計算機程式語言來實現深度優先搜尋這個演算法的手段
字元s表示起點,字元t表示終點,字元*表示牆壁,字元.表示平地。你需要從s出發走到t,每次只能向上下左右相鄰的位置移動,不能走出地圖,也不能穿過地圖,每個點只能通過一次。你需要程式設計來求解出一種從起點到終點的走法
#include
#include
using
namespace std;
int n, m;
string maze[
110]
;boolin(
int x,
int y)
bool vis[
100]
[100];
bool
dfs(
int x,
int y)
vis[x]
[y]=1;
maze[x]
[y]=
'm';
int tx = x -
1, ty = y;if(
in(tx, ty)
&& maze[tx]
[ty]
!='*'
&&!vis[tx]
[ty])}
tx = x , ty = y-1;
if(in(tx, ty)
&& maze[tx]
[ty]
!='*'
&&!vis[tx]
[ty])}
tx = x+
1, ty = y;if(
in(tx, ty)
&& maze[tx]
[ty]
!='*'
&&!vis[tx]
[ty])}
tx = x, ty = y +1;
if(in(tx, ty)
&& maze[tx]
[ty]
!='*'
&&!vis[tx]
[ty])}
vis[x]
[y]=0;
maze[x]
[y]=
'.';
}int
main()
int x, y;
for(
int i =
0; i < n; i++)}
}if(dfs
(x,y))}
else
return0;
}
簡化程式
#include
#include
using
namespace std;
int n, m;
string maze[
110]
;boolin(
int x,
int y)
int dir[4]
[2]=
,,,}
;bool vis[
100]
[100];
bool
dfs(
int x,
int y)
vis[x]
[y]=1;
maze[x]
[y]=
'm';
for(
int i =
0; i <
4; i++)}
} vis[x]
[y]=0;
maze[x]
[y]=
'.';
return
false;}
intmain()
int x, y;
for(
int i =
0; i < n; i++)}
}if(dfs
(x,y))}
else
return0;
}
廣度優先搜尋 深度優先搜尋
前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...
廣度優先搜尋,深度優先搜尋
深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...
深度優先搜尋 廣度優先搜尋
深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...