在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。
input共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。
output
共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。
sample input18之前看過書上那個八皇后的,是用乙個二維陣列模擬棋盤,然後逐行只代入乙個皇后分析,判斷代入的皇后的那一列,的每一行有沒有皇后(皇后所在行就不判斷了,因為已經定好一行只有乙個皇后),和判斷左對角和右對角有沒有皇后,如果滿足就繼續下一行放,不滿足就拿走這個皇后回退到上一步。50sample output192
10
再回到這個題,n皇后就是把88陣列換成nn,動態分配二維陣列那個int arr=new int[n]應該可以吧,好像有點麻煩,然後看到這個題n小於10,直接就設個1010算了。。。so vegetable
#include
using namespace std;
int n
,count;
int arr[10]
[10];
bool check
(int row,int col)
//再檢查對角,這是左對角
for(int i=row-
1,j=col-
1;i>=
0&&j>=
0;i--
,j--
)//右對角
for(int i=row-
1,j=col+
1;i>=
0&&j<
n;i--
,j++
)return
true;}
void
search
(int row)
for(int i=
0;i<
n;i++)}
}int main()
return0;
}
vj上過不了阿超時了。。。哎先基本學個回溯的思想吧,之後有空再看看改進的方法,好像一共有四種???
-----------------------------------分割線----------------------------
馬上到oj去偷師了一下哈哈哈,居然還有把答案放到陣列裡直接輸出答案的狗血方法。。。
還是要認真copy了個**瞧瞧
#include
#include
#include
using namespace std;
int a[
110]
[110
],ver[
110],l
[110],
r[110]
;///豎線,左斜線,右斜線
int ans ;
void
dfs(int i,int n)
for(int j =
0;j}int main()
; int f[11]
;///防止資料大量計算
f[0]
=0;for
(int i =
1;i<=
10;i++
)while
(cin >> n)
}
2n皇后問題
問題描述 在n n的矩陣中放入n個白皇后和n個黑皇后,該矩陣由元素 和 組成,代表該位置不能放皇后,代表可以放皇后,n個的皇后兩兩不能在同一行和同一列以及同一對 角線上,n個黑皇后兩兩不能在同一行和同一列以及同一對角線上。求最多有幾種放法?解法 這個問題跟 皇的問題類似,只不過多了另外一種顏色的皇后...
2n皇后問題
問題描述 給定乙個 n n 的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入 n 個黑皇后和 n 個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不 在同一行 同一列或同一條對角線上。問總共有多少種放法?n 小於等於 8。輸入格式 輸入的第一行為乙個整數 n...
2n皇后問題
基礎練習 2n皇后問題 時間限制 1.0s 記憶體限制 512.0mb 問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放...