'commit'
This commit is contained in:
69
C++专题课程/回溯算法/皇后问题(回溯法)/2N皇后问题解法2.cpp
Normal file
69
C++专题课程/回溯算法/皇后问题(回溯法)/2N皇后问题解法2.cpp
Normal file
@@ -0,0 +1,69 @@
|
||||
#include<bits/stdc++.h>
|
||||
using namespace std;
|
||||
//<2F><><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>, ˼·<CBBC><C2B7><EFBFBD>ȷŰʺ<D7BB>, <20><><EFBFBD>ʺ<D7BB><CABA><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>, <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>úڻʺ<DABB>
|
||||
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
int n;
|
||||
int m[9][9];
|
||||
int blackPos[9];
|
||||
int whitePos[9];
|
||||
int cnt = 0;
|
||||
|
||||
// <20>жϵ<D0B6>ǰ<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD>ûʺ<C3BB>
|
||||
bool isSafe(int pos[], int row) {
|
||||
for(int i = 0; i < row; i++) {
|
||||
if(pos[i] == pos[row] || abs(pos[i] - pos[row]) == abs(i - row)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// <20>Ժڻʺ<DABB><CABA>ķ<EFBFBD><C4B7>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void blackDfs(int row) {
|
||||
if(row == n) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E><EFBFBD>ڻʺ<DABB>, <20><>ô<EFBFBD>ڷŵķ<C5B5><C4B7><EFBFBD><EFBFBD><EFBFBD>1
|
||||
cnt++;
|
||||
return ;
|
||||
} else {
|
||||
for(blackPos[row] = 0; blackPos[row] < n; blackPos[row]++) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰλ<C7B0><CEBB>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻʺ<DABB><CABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ, <20><>ǰ<EFBFBD><C7B0><EFBFBD>Է<EFBFBD><D4B7>úڻʺ<DABB><CABA><EFBFBD><EFBFBD>ҵ<EFBFBD>ǰ<EFBFBD><C7B0>λ<EFBFBD><CEBB>û<EFBFBD>з<EFBFBD><D0B7>ðʺ<D7BB>
|
||||
if(isSafe(blackPos, row) && m[row][blackPos[row]] == 1 & blackPos[row] != whitePos[row]) {
|
||||
blackDfs(row+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <20>ʺ<D7BB><CABA>ķ<EFBFBD><C4B7>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void whiteDfs(int row) {
|
||||
if(row == n) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E><EFBFBD>ʺ<D7BB>, <20><><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7>úڻʺ<DABB>
|
||||
blackDfs(0);
|
||||
return;
|
||||
} else {
|
||||
for(whitePos[row] = 0; whitePos[row] < n; whitePos[row]++) {
|
||||
// <20><>ǰλ<C7B0><CEBB>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʺ<D7BB><CABA><EFBFBD>ͻ<EFBFBD>ҵ<EFBFBD>ǰλ<C7B0><CEBB><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD>
|
||||
if(isSafe(whitePos, row) && m[row][whitePos[row]] == 1) {
|
||||
whiteDfs(row+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main() {
|
||||
scanf("%d", &n);
|
||||
for(int i = 0; i < n; i++) {
|
||||
for(int j = 0; j < n; j++) {
|
||||
scanf("%d", &m[i][j]);
|
||||
}
|
||||
}
|
||||
whiteDfs(0);
|
||||
printf("%d\n", cnt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user