深度優先搜尋的小探索

2021-10-03 02:59:37 字數 1628 閱讀 8824

第一次寫部落格,還不清楚套路,請見諒。

關於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沒有鄰...