第一次寫部落格,還不清楚套路,請見諒。
關於dfs我在洛谷上看到乙個模板,覺得挺好
/*int search(int t)
else}}
}/深度優先搜尋在很多題目會涉及,這裡附上洛谷p1605迷宮
給定乙個nm方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和終點座標,問: 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。
#include
//回溯有問題
using
namespace std;
#define maxn 10
int a[maxn]
[maxn]
,map[maxn]
[maxn]
;//標記
int n,m,t,sx,sy,fx,fy,zx,zy,ans=0;
int dx[4]
=,dy[4]
=;void
dfs(
int x,
int y)
else}}
}int
main()
dfs(sx,sy)
; cout
}在這裡,我明白了回溯的作用,我也是看了題解才發現的錯誤。
p1101單詞方陣
給一n×nn \times nn×n的字母方陣,內可能蘊含多個「yizhong」單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著 888 個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間可以交叉,因此有可能共用字母。輸出時,將不是單詞的字母用*代替,以突出顯示單詞。例如:
8qyizhong
gydthkjy
nwidghji
orbzsfgz
hhgrhwth
zzzzzozo
iwdfrgng
yyyygggg
yizhong
gy*****
ni*****
oz***
hh***
zo**
i*****n
y****g
#include
//記錄路徑
#define maxn 105
using
namespace std;
int n;
struct node
c[maxn]
;//記錄路徑
char a[maxn]
[maxn]
,ch=
"yizhong"
;int b[maxn]
[maxn]
;int dx[8]
=,dy[8]
=;void
dfs(
int x,
int y,
int k,node c,
int cur)
else}}
intmain()
}for
(int i=
1;i<=n;i++
)return0;
}
小談深度優先搜尋
最近讀了一本演算法書,書中提到了深度優先演算法,於是我就整理了一下。引入小題 解決方案 這裡先使用最簡單最常用的窮舉法時行求解。此 中的book陣列起到了標記的作用,可以參考桶裝法排序了解標記的好處和作用 include int main 將獲得的序列標記一下,方便判斷是否全為不一樣的數字 for ...
深度優先搜尋 廣度優先搜尋(解決小哈)
問題省略 思路 讓小哼往右邊走,直到走不通的時候再回到這裡,再去嘗試另乙個方向。規定乙個順序,按順時針方向來嘗試 即按照右 下 左 上的順序去嘗試 先 檢查小哼是否已經到達小哈的位置,如果沒有到達則找出下一步可以走的地方。為了解決這個問題,此處dfs 函式只需要維護3個引數,分別是x座標 y座標 以...
廣度優先搜尋 深度優先搜尋
前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...