Skip to content

Conversation

@seuchoi0531
Copy link

백트래킹으로 해결했습니다.
퀸이 놓여진 위치의 열 값을 배열에 담고 다음 놓을 퀸의 위치의 열이 타당한지 보고 행이 최대가 되면 리턴합니다

문제 해결 아이디어

screenshot

image

핵심 코드

#include<iostream>
#include<vector>
using namespace std;
long long cnt = 0, N;
vector<int> c, r;
void repeat(int k) {
	c.push_back(k);
	bool ok = true;
	for (int i = 1; i <= N; i++) {
		for (int j = 0; j < r.size(); j++) {
			if (r.at(j) == i) {
				ok = false;
				break;
			}
			if (k - j - 1 == i - r.at(j)) {
				ok = false;
				break;
			}
			if (k - j - 1 == r.at(j) - i) {
				ok = false;
				break;
			}
		}
		if (ok) {
			r.push_back(i);
			if (r.size() == N) {
				cnt++;
				r.pop_back();
			}
			else {
				repeat(k + 1);
				r.pop_back();
			}
		}
		ok = true;
	}
	c.pop_back();
}
int main() {
	cin >> N;
	c.push_back(1);
	for (int i = 1; i <= N; i++) {
		r.push_back(i);
		repeat(2);
		r.pop_back();
	}
	if (N == 1)
		cout << 1;
	else
		cout << cnt;
}

백트래킹으로 해결했습니다.
퀸이 놓여진 위치의 열 값을 배열에 담고 다음 놓을 퀸의 위치의 열이 타당한지 보고 행이 최대가 되면 리턴합니다
반복문으로 해결했습니다
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants