深度優先搜尋

2021-07-08 13:20:44 字數 991 閱讀 3873

部分和問題:給定整數a1,a2、、、、an,判斷是否可以從中選出若干數,使他們的和恰好為k、(1<=n<20)

//從a1開始按照順序決定每個數加或不加,在全部n個數都決定後再判斷它們的和是不是k即可。

int a[max_n];

int n, k;

//已經從前i項得到了和sum,然後對於i項之後的進行分支

bool dfs(int i, int sum)

void solve()

深度優先搜尋

從最開始的狀態出發,遍歷所有可以到達的狀態。由此可以對所有的狀態進行操作,或者列舉出所有的狀態。

poj2386:有乙個大小為n*m的園子,雨後積起了水。八連通的積水被認為是連線在一起的。請求出園子裡總共有多少水窪?

****w*

***/*從任意的w開始,不停地把鄰接的部分用「。」代替。1次dfs後與初始的這個w連線的所有w就被替換成了「。」,因此直到圖中不再

*存在w為止,總共進行dfs的次數就是答案了。8個方向共對應了8種狀態轉移,每個格仔作為dfs的引數至多被呼叫一次,所以複雜度為o(n*m)

*/int n, m;

char field[max_n][max_n + 1];

//現在位置(x, y)

void dfs(int x, int y) {

//將現在所在位置替換為.

field[x][y] = '.';

//迴圈遍歷移動的8個方向

for (int dx = -1; dx <=1; dx ++ ) {

for (int dy = -1; dy <= 1; dy ++) {

// 向x方向移動dx,向y方向移動dy,移動的結果是(nx, ny)

int nx = x + dx, ny = y + dy;

//判斷(nx,ny)是不是在園子內,以及是否有積水

if (0<=nx && nx < n && ny>=0 && ny

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得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...