[伯俊]9663号:N-Queen
回答日:2021-09-18
質問する
最初の行からQueenを配置します.(コード内の1次元配列板変数のindexは行を表し、その値は列を表す.ex)board[1]==2はQueenが第1行第2列にあることを表す.)
1-1. その場所にQueenを置くことができるかどうかを確認します.(isPossible関数)
1-2. これで、前の行の後ろの位置を表示し、同じ列に表示できます(board[row]==board[i]).
対角位置(abs(board[row]-board[i])=row-i)にあるかどうかを確認します. がこのように行われたとき、N個の皇后がすべて置かれたときに、もう一つの皇后を置く方法を追加します. コード#コード#
質問する
質問リンク:https://www.acmicpc.net/problem/9663
アクセスと解析
これは私個人では解決しにくい後継問題です.
まず皇后の行為を理解しなければならない.
皇后は上、下、左、右、対角方向に歩くことができるので、いずれかの行に皇后を置く場合、その行、列、およびすべての対角方向に他の皇后を置くことはできません.
これらの事実を利用して実施した.
これは私個人では解決しにくい後継問題です.
まず皇后の行為を理解しなければならない.
皇后は上、下、左、右、対角方向に歩くことができるので、いずれかの行に皇后を置く場合、その行、列、およびすべての対角方向に他の皇后を置くことはできません.
これらの事実を利用して実施した.
1-1. その場所にQueenを置くことができるかどうかを確認します.(isPossible関数)
1-2. これで、前の行の後ろの位置を表示し、同じ列に表示できます(board[row]==board[i]).
対角位置(abs(board[row]-board[i])=row-i)にあるかどうかを確認します.
コード#コード# // 백준 9663번 : N-Queen
#include <iostream>
using namespace std;
int N, ans = 0;
int board[16]; // idx : 행, 값 : 열
bool isPossible(int row) {
for (int i = 0; i < row; i++) {
if (board[row] == board[i] || (abs(board[row] - board[i]) == row - i )) {
return false;
}
}
return true;
}
void dfs(int row) {
if (row == N) {
ans++;
return;
}
for (int col = 0; col < N; col++) {
board[row] = col;
if (isPossible(row)) {
dfs(row + 1);
}
}
}
int main() {
cin >> N;
dfs(0);
cout << ans;
return 0;
}
結果
フィードバック
少し難しかったので実現に時間がかかりました.難易度の高い問題ももっとやらなければならない.
Reference
この問題について([伯俊]9663号:N-Queen), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/백준-9663번-N-Queen
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
// 백준 9663번 : N-Queen
#include <iostream>
using namespace std;
int N, ans = 0;
int board[16]; // idx : 행, 값 : 열
bool isPossible(int row) {
for (int i = 0; i < row; i++) {
if (board[row] == board[i] || (abs(board[row] - board[i]) == row - i )) {
return false;
}
}
return true;
}
void dfs(int row) {
if (row == N) {
ans++;
return;
}
for (int col = 0; col < N; col++) {
board[row] = col;
if (isPossible(row)) {
dfs(row + 1);
}
}
}
int main() {
cin >> N;
dfs(0);
cout << ans;
return 0;
}
フィードバック
少し難しかったので実現に時間がかかりました.難易度の高い問題ももっとやらなければならない.
Reference
この問題について([伯俊]9663号:N-Queen), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/백준-9663번-N-Queen
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([伯俊]9663号:N-Queen), 我々は、より多くの情報をここで見つけました https://velog.io/@bestcoders/백준-9663번-N-Queenテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol