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,直到結點的所有鄰接結點以及其鄰接結點的鄰接結點都被訪問完,才訪...