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