9663 N-Queen
質問リンク
https://www.acmicpc.net/problem/9663
に答える
NxNチェス盤にN個の皇后を重ねないためには、行ごとに1個の皇后しか置かない.そうでなければ、横軸に女王同士の攻撃が必ずあるからだ.重要)つまり,チェス盤全体を検査するために2つのドアを回す必要はなく,1行あたり数列目に皇后を置くだけで保存できる.1 D配列ボードを使用して、皇后の列の情報を格納します.ゼロインデックスから始めればいいです.PUTQでは、繰り返しの扉を回り、n行目のi列にQueen(列が重ならず、対角線で会わない(列間の車、行間の車の絶対値が同じなら会える)を置けるかどうかをチェックし、置けるならnを1増やしてPUTQに入れて次の行に戻る.nがnに等しい場合、n個の皇后はすべて解放されるので、ans 1が増加し、関数が終了する.最後にansを出力すればいいです.
C++コード
#include <stdio.h>
#include <math.h>
using namespace std;
int N;
int board[15];
int ans = 0;
void putQ(int n){
if(n == N){
ans++;
return;
}
for(int i=0; i<N; i++){
board[n] = i;
bool check = true;
for(int i=0; i<n; i++){
if(board[i] == board[n] || n-i == abs(board[n] - board[i])){
check = false;
break;
}
}
if(check){
putQ(n+1);
}
}
}
int main(){
scanf("%d", &N);
putQ(0);
printf("%d\n", ans);
return 0;
}
Reference
この問題について(9663 N-Queen), 我々は、より多くの情報をここで見つけました https://velog.io/@binary_j/9663-N-Queenテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol