演算法(九) DFS與BFS演算法

2021-10-02 17:09:57 字數 2943 閱讀 2825

優秀的模板;

很棒的總結:

具體講解可以參考《啊哈!演算法》

題2045

題目描述

在乙個55的地圖上,存在著障礙物和平地。在這個地圖中,小x想要找到回家的路。

地圖上,你可以每次上下左右行走一步。

他希望他回家所走的是最短路,請問,他所走的路徑中,最短路的方案數。

輸入共5行,每行是乙個字串。

「.」表示空地,「」表示障礙物,「s」表示小x的家

小x起始時位於左上角。

輸出乙個數,表示方案數。

樣例輸入

…**.

..*……s

樣例輸出

5

#include

#include

using

namespace std;

int n =5;

char a[30]

[30];

bool visited[30]

[30];

int mins =

9999999

;int hash[

100]

;void

dfs(

int x,

int y,

int step),,

,};//按照右下左上的順序

//判斷是否到達終點

if(a[x]

[y]==

's')

return;}

for(

int k =

0;k<

4;k++

)//四個方向 }}

intmain()

startx=

0;starty=0;

//起始點

visited[startx]

[starty]

=true

;//標記起始點在已走路徑中,防止後面重複走

dfs(startx,starty,0)

; cout<;//輸出

getchar()

;getchar()

;return0;

}

題2046 輸出全排列

題目描述

給出乙個數n,要求你輸出1到n的全排列(要求字典序從小到大)

(n<=10)

輸入乙個數n

輸出包括若干行,每行包含n個數,表示相應的全排列值。

樣例輸入

4樣例輸出

1 2 3 4

1 2 4 3

1 3 2 4

1 3 4 2

1 4 2 3

1 4 3 2

2 1 3 4

2 1 4 3

2 3 1 4

2 3 4 1

2 4 1 3

2 4 3 1

3 1 2 4

3 1 4 2

3 2 1 4

3 2 4 1

3 4 1 2

3 4 2 1

4 1 2 3

4 1 3 2

4 2 1 3

4 2 3 1

4 3 1 2

4 3 2 1提示無

dfs解法

#include

#include

using

namespace std;

int n,i;

int a[

100]

;bool visited[

100]

;void

dfs(

int step)

cout<<

'\n'

;return;}

for(

int j=

1;j<=n;j++

)//n個數迴圈}}

intmain()

另一種解法:使用stl函式

#include

#include

#include

using

namespace std;

intmain()

while

(next_permutation

(num,num+n));

getchar()

;getchar()

;return0;

}

題2047 x皇后問題

皇后可以橫著,豎著,斜著走,所以問題可以簡化為:首先進行全排序,即滿足橫豎互不影響,再將滿足斜著不影響的輸出即可,即abs(i-j) != abs(a[i]-a[j])。題目要求字典數最小的輸出,即全排列第乙個。

題目描述

請輸出字典序最小的x皇后問題對應的排列。

(x<=10)

輸入乙個數x

輸出包括一行,輸出1~x的乙個排列,滿足x皇后問題的要求。

樣例輸入

8樣例輸出

1 5 8 6 3 7 2 4

#include

#include

#include

using

namespace std;

int n,a[

1000

],k=0;

bool visited[

1000];

void

output()

cout<<

'\n'

; k++

;//因為只需輸出第一組序列,k用來計數

}void

dfs(

int step)

}for

(int i=

1;i<=n;i++)}

}int

main()

BFS與DFS演算法

dfs總結 首先,我們先了解一下bfs,bfs又稱廣度優先搜尋,一般都是用於解決一些圖,樹的遍歷問題。其實廣度優先搜尋就類似與二叉樹的層序遍歷過程,需要借助c 中stl裡面的queue佇列容器來實現這個過程。它其實就是一種分層查詢的過程,每次向前走一步,都會去訪問一批可以訪問的節點,不會存在dfs裡...

演算法 DFS與BFS

一 dfs 深度優先搜尋 dfs 深度優先遍歷dfs與樹的先序遍歷比較類似。假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點然後依次訪問它的所有鄰接結點,每次訪問乙個鄰接結點時,以該鄰接結點為根結點繼續進行dfs,直到結點的所有鄰接結點以及其鄰接結點的鄰接結點都被訪問完,才訪...

演算法筆記之DFS與 BFS

基本思想 深度優先搜尋 dfs,depth first search 它從某個狀態開始,不斷的轉移狀態直到無法轉移狀態,然後回退到前一步的狀態,繼續轉移到其它狀態,如此不繼重複,直至找到最終的解。寬度優先搜尋 bfs,breadth first search 總是先搜尋距離初始狀態近的狀態,也就是說...