N皇后問題和2N皇后問題(深搜)

2021-09-25 10:52:24 字數 2073 閱讀 3370

在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。 

你的任務是,對於給定的n,求出有多少種合法的放置方法。 

input

共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。

output

共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。

sample input

185

0

sample output

1

9210

題解:

(1,1)

(2,1)

(3,1)

(4,1)

(5,1)

(1,2)

(2,2)

(3,2)

(4,2)

(5,2)

(1,3)

(2,3)

(3,3)

(4,3)

(5,3)

(1,4)

(2,4)

(3,4)

(4,4)

(5,4)

(1,5)

(2,5)

(3,5)

(4,5)

(5,5)

針對於棋盤對角線(1,1),(2,2),(3,3),(4,4),(5,5);(1,4),(2,5);等此方向的數x-y為定值;

(5,1),(4,2),(3,3)(2,4),(1,5);(5,4),(5,4),(4,5);等此方向的數(x+y)為定值;

#include#includeint book1[22],book2[22],book3[22],sum[22];

int ans;

void dfs(int x,int y)//x即表示皇后位於的行數y表示棋盤的寬度

for(int i=1; i<=y; i++) //列

}}int main()

int n;

while(~scanf("%d",&n))

return 0;

}

知道了n皇后的 問題,那麼2n皇后的 問題也就迎刃而解了。直接 上**。。。。

題目描述

給定乙個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少種放法?n小於等於8。 

輸入輸入的第一行為乙個整數n,表示棋盤的大小。 

接下來n行,每行n個0或1的整數,如果乙個整數為1,表示對應的位置可以放皇后,如果乙個整數為0,表示對應的位置不可以放皇后。 

輸出輸出乙個整數,表示總共有多少種放法。 

樣例輸入

4

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

樣例輸出

2
#include#include#include#includeusing namespace std;

int a[10][10];

int book1[40],book2[40],book3[40];

int vis1[40],vis2[40],vis3[40];

int ans;

int n;

void init()

void w_dfs(int x,int y)

for(int i=1; i<=y; i++)

}}void b_dfs(int x,int y)

for(int i=1; i<=y; i++)

}}int main()

}ans=0;

b_dfs(1,n);

printf("%d\n",ans);

}return 0;

}

2n皇后問題(深搜dfs)

基礎練習 2n皇后問題 問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后 和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩 個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行為乙...

n皇后與2n皇后問題

題目 在n n格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於再n n的棋盤上放置n個皇后,任何2個皇后不妨在同一行或同一列或同一斜線上。給定棋盤的大小n n 13 輸出整數表示有多少種放置方法 n 8是時輸出92 incl...

N皇后 2N皇后問題總結

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