1019 N皇后問題

2021-07-11 07:42:59 字數 806 閱讀 9563

1019 n皇后問題

題意:在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。對於給定的n,求出有多少種合法的放置方法。

思路:考慮皇后放置的位置,對於每一行,需要列舉每個可以放置皇后的位置,而且需要判斷當前位置(第i行)是否滿足條件,即判斷這個位置是否與放置好的前i-1行的皇后的位置相衝突,如果衝突,說明這個位置不合適;否則的話,就可以列舉下一行皇后的位置,直至第n行。

感想:放置皇后與之前位置的判斷,使其不產生衝突,不斷的回溯求解。

#include

#include

using namespace std;

int a[11],n,sum,flag;

void dfs(int k){

if(k>n){

sum++;

return ;

else{

for(int i=1;i<=n;i++){

a[k]=i;

flag=1;

for(int j=1;jif(a[j]==a[k]||abs(k-j)==abs(a[k]-a[j])){

flag=0;

break;

if(flag)

dfs(k+1);

int main(){

int cnt[11];

for(n=1;n<11;n++){

sum=0;

dfs(1);

cnt[n]=sum;

while(cin>>n&&n){

cout

1019N皇后問題

total submission s 83 accepted submission s 40 problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有...

1019 N皇后問題

problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...

N皇后問題

include define maxqueens 20 define minqueens 4 enum bool typedef struct queendata queendata queendata queens maxqueens 1 int ncount init int init chec...