Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.4 kB
5
Indexable
Never
Cho bàn cờ có kích thước NxN, và N quân hâu.

Có bao nhiêu cách để sắp xếp N quân hâu vào bàn cờ sao cho chúng không đe dọa lẫn nhau

input:

Dòng đầu tiên là số lương testcase,

Các dòng tiếp theo là kích thước bàn cờ N cho mỗi testcase.



Output:

In ra mỗi testcase với kết quả là số cách sắp xếp dưới dạng: 

Case #1: 1

Case #2: 0

Case #3: 0


13
1
2
3
4
5
8
6
7
13
12
11
9
10


#include <iostream>

using namespace std;

int T;
int N;

int checkCot[40];
int checkCheo1[40];
int checkCheo2[40];

int ans = 0;

int abss(int x) {
	if (x >= 0) return x;
	return -x;
}

void backTrack(int hang) {
	for (int cot = 0; cot < N; cot++) {
		if (checkCot[cot] == 0 && checkCheo1[hang - cot + N] == 0 && checkCheo2[hang + cot] == 0) {
			checkCot[cot] = 1;
			checkCheo1[hang - cot + N] = 1;
			checkCheo2[hang + cot] = 1;
			if (hang == N - 1) ans++;
			else backTrack(hang + 1);
			checkCot[cot] = 0;
			checkCheo1[hang - cot + N] = 0;
			checkCheo2[hang + cot] = 0;
		}
	}
}

int main() {
	cin >> T;
	for (int t = 1; t <= T; t++) {
		cin >> N;
		for (int i = 0; i < 40; i++) {
			checkCot[i] = 0;
			checkCheo1[i] = 0;
			checkCheo2[i] = 0;
		}
		ans = 0;
		backTrack(0);
		cout << "Case #" << t << ": " << ans << endl;
	}
	return 0;
}
Leave a Comment