n-皇后問題是指將 n 個皇后放在 n∗n 的西洋棋棋盤上,使得皇后不能相互攻擊到,即任意兩個皇后都不能處於同一行、同一列或同一斜線上。
現在給定整數n,請你輸出所有的滿足條件的棋子擺法。
輸入格式
共一行,包含整數n。
輸出格式
每個解決方案佔n行,每行輸出乙個長度為n的字串,用來表示完整的棋盤狀態。
其中」.」表示某乙個位置的方格狀態為空,」q」表示某乙個位置的方格上擺著皇后。
每個方案輸出完成後,輸出乙個空行。
資料範圍
1≤n≤9
輸入樣例:
4
輸出樣例:
.q...
..qq..
...q..
.q.q...
...q.q.
.
此題思想與數字排列類似,在爆搜的基礎上加上條件的剪枝搜尋。
**:
#include
using
namespace std;
const
int n=20;
int n;
char path[n]
[n];
bool dg[n]
,udg[n]
,col[n]
;void
dfs(
int u)
for(
int i=
0;i(!col[i]
&&!dg[i+u]
&&!udg[i-u+n])}
intmain()
第二種搜尋方法
#include
using
namespace std;
const
int n=20;
int n;
char path[n]
[n];
bool row[n]
,col[n]
,dg[n]
,udg[n]
;void
dfs(
int x,
int y,
int s)
if(x==n)
return;}
//不放皇后
dfs(x,y+
1,s)
;//放皇后if(
!row[x]
&&!col[y]
&&!dg[x+y]
&&!udg[x-y+n])}
intmain()
N皇后問題 DFS
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...
N皇后問題 dfs)
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...
N皇后問題 DFS
題 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共...