dfs與bfs的錯誤

2021-10-20 22:27:01 字數 1870 閱讀 8311

n-皇后問題是指將 n 個皇后放在 n∗n 的西洋棋棋盤上,使得皇后不能相互攻擊到,即任意兩個皇后都不能處於同一行、同一列或同一斜線上。

現在給定整數n,請你輸出所有的滿足條件的棋子擺法。

輸入格式

共一行,包含整數n。

輸出格式

每個解決方案佔n行,每行輸出乙個長度為n的字串,用來表示完整的棋盤狀態。

其中」.」表示某乙個位置的方格狀態為空,」q」表示某乙個位置的方格上擺著皇后。

每個方案輸出完成後,輸出乙個空行。

注意:行末不能有多餘空格。

輸出方案的順序任意,只要不重複且沒有遺漏即可。

資料範圍

1≤n≤9

#include

using

namespace std;

//dfs 精髓 順序

bool jud[20]

;//判斷列

bool xie[

100]

;bool xie2[

100]

;//不要忘記主對角線

int n;

int a[20]

;//記錄每一行queen出現的位置

void

dfs(

int col,

int row)

else

} cout<}printf

("\n");

jud[col]=0

; xie[row+col]=0

; xie2[row-col+20]

=0;return;}

for(

int i=

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

jud[col]=0

; xie[row+col]=0

; xie2[row-col+20]

=0;}

intmain()

return0;

}

bfs

給定乙個n*m的二維整數陣列,用來表示乙個迷宮,陣列中只包含0或1,其中0表示可以走的路,1表示不可通過的牆壁。

最初,有乙個人位於左上角(1, 1)處,已知該人每次可以向上、下、左、右任意乙個方向移動乙個位置。

請問,該人從左上角移動至右下角(n, m)處,至少需要移動多少次。

資料保證(1, 1)處和(n, m)處的數字為0,且一定至少存在一條通路。

輸入格式

第一行包含兩個整數n和m。

接下來n行,每行包含m個整數(0或1),表示完整的二維陣列迷宮。

輸出格式

輸出乙個整數,表示從左上角移動至右下角的最少移動次數。

資料範圍

1≤n,m≤100

#include

using

namespace std;

int a[

105]

[105];

int cnt[

105]

[105];

//我們不能只用乙個cnt就記錄這個結果

int n,m;

int dx[4]

=;int dy[4]

=;queue<

int>q1,q2;

//乙個存x乙個存y

intmain()

} q1.

push(1

),q2.

push(1

);while

(!q1.

empty()

) q1.

pop(

),q2.

pop();

for(

int i=

0;i<

4;i++)}

}return0;

}

DFS與BFS的應用

題目 給出乙個n m矩陣,矩陣中的元素為0或1,稱位置 x,y 與其上下左右四個位置 x,y 1 x,y 1 x 1,y x 1,y 是相鄰的。如果矩陣中有若干個1是相鄰的 不必兩兩相鄰 那麼稱這些1構成了乙個 塊 求給定的矩陣中 塊 的個數。如 0 1 1 1 0 0 1 0 0 1 0 0 0 ...

BFS與DFS演算法

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

演算法 DFS與BFS

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