DFS和BFS典型例題

2021-10-10 18:38:38 字數 3288 閱讀 6874

dfs模板:

void

dfs(

)//引數用來表示狀態

if(越界或者不合法狀態)

return

;else}}

}

全排列

#include

#include

int v[

1005

], a[

1005

], n;

void

dfs(

int c)

else}}

}int

main()

return0;

}

素數環

#include

#include

int a[25]

, v[25]

, k =

1, n;

//用來判斷是否為素數

intisprime

(int a)}if

(flag)

return1;

else

return0;

}}void

dfs(

int c)

else}}

}int

main()

return0;

}

走迷宮

#include

#include

#include

char maze[10]

[10]=

;int vis[10]

[10];

int sum =0;

/*邊解條件

1、走到'e',停止計數

2、不能夠非法訪問,越界

3、走過的點不要重複走

4、遇到牆,結束

*/void

solve

(int x,

int y)

if(x ==-1

|| x =

5|| y ==-1

|| y ==5)

return;if

(vis[x]

[y]==1)

return;if

(maze[x]

[y]==

'x')

return

; vis[x]

[y]=1;

solve

(x +

1, y)

;solve

(x, y +1)

;solve

(x -

1, y)

;solve

(x, y -1)

; vis[x]

[y]=0;

}int

main()

}printf

("%d"

, sum)

;return0;

}

油菜田

#include

#include

char a[

105]

[105

], v[

105]

[105];

int n, m;

void

dfs(

int x,

int y)

//dfs主要的作用是為了標記屬於同乙個圖上的@,所以不需要回溯}}

intmain()

}}}}

wjw和ly的雙人遊戲*

#include

#include

//攻破城堡i需要先攻破f[i]

int f[15]

, a[15]

, v[15]

;int n, m, ans;

intmax

(int a,

int b)

intfind()

//用來計算滿足城堡數量時的寶物數量}}

if(cnt == m)

return sum;

else

return0;

}void

dfs(

int x,

int c)

if(x == n +1)

return

; v[x]=1

;dfs

(x +

1, c +1)

; v[x]=0

;dfs

(x +

1, c);}

intmain()

return0;

}

bfs本質就是讓你從一幅[圖]中找到從起點start到終點target的最近距離。

bfs模板:

int

mindepth

(treenode root)

/* 這裡增加步數 */

depth++;}

return depth;

}

走迷宮(求最少步數)

#include

#include

char maze[10]

[10]=

;int sum =0;

typedef

struct mazenode

node;

node queue[

1000];

//初始化乙個佇列

/* can()函式功能:用來判斷該點是否在區域內

*/int

can(

int x,

int y)

intmain()

;//方向陣列

int dy[4]

=;for(

int i =

0; i <

5; i++)if

(maze[i]

[j]==

'e')}}

//for

/*查詢結束*/

int rear =0;

int front =0;

node p =

;//初始化

queue[rear++

]= p;

while

(front < rear)

for(

int i =

0; i <

4; i++)}

}return0;

}

BFS和佇列例題

poj2251dungeon master 最簡單的bfs求最短距離,只是改一下方向陣列就可以,二維陣列改為三維陣列 下面是ac 對了,下面用的c 佇列,其實很簡單,就只有幾種操作 先介紹佇列的定義 queue 型別名 變數名,如 queueq,queue或queueque struct node ...

DFS和BFS演算法

本質區別 bfs 的重點在於佇列,而 dfs 的重點在於遞迴。這是它們的本質區別。dfs 演算法 是一種利用遞迴 實質上是用棧來儲存未訪問的結點,先進後出 實現的搜尋演算法,直到找到解或走不下去為止。簡單來說,其搜尋過程和 不撞南牆不回頭 樹的先序遍歷 類似。bfs演算法 是一種利用佇列 用佇列來儲...

DFS和BFS演算法

一 深度優先遍歷 深度優先搜尋,是圖論中的經典演算法。其利用深度優先搜尋演算法可以產生目標圖的相應拓撲排序表,利用拓撲排序表可以方便的解決很多相關的圖論問題,如最大路徑問題等等。遞迴定義 圖的深度優先遍歷類似於樹的前序遍歷。採用的搜尋方法的特點是盡可能先對縱深方向進行搜尋。這種搜尋方法稱為深度優先搜...