首页 > 代码库 > 八皇后问题 2017 4 24
八皇后问题 2017 4 24
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int queen[10] = {0};
bool place(int k){
for(int i=0;i<k;i++){
if(queen[k]==queen[i]||abs(k-i)==abs(queen[i]-queen[k])){
return false;
}
}
return true;
}
int count1=0;
void back(int t,int n){
if(t>=n)
count1++;
else{
for(int i=0;i<n;i++){
queen[t] = i;
if(place(t)){
back(t+1,n);
}
}
}
}
int main(){
int n;
while(cin>>n){
count1=0;
back(0,n);
cout<<count1<<endl;
}
return 0;
}
/*
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
class Queen{ //创建一个Queen类
public:
int count;
Queen(int n){
N = n;
count = 0;
memset(queens_N, 0, sizeof(queens_N));
};
bool Place(int k);
void Backtrack(int t); //回溯求解
private:
int N;
int queens_N[9];
};
bool Queen::Place(int k){ //寻找第k列的位置,要是没有位置了返回false,要是有位置,返回true
for (int j = 0; j < k; j++) { //检查放在k位置的皇后是否可行
if (queens_N[k] == queens_N[j] || abs(k-j) == abs(queens_N[j] - queens_N[k])) return false;
}
return true;
}
void Queen::Backtrack(int t){ //回溯方法求解
if (t >= N) {
count ++;
}
else{
for (int i = 0; i < N; i++) {
queens_N[t] = i;
if (Place(t)) {
Backtrack(t+1);
}
}
}
}
int main(int argc, const char * argv[]) {
// insert code here...
int N;
while (cin >> N) {
Queen queen(N); //创建N黄后这个类
queen.Backtrack(0); //从第一个位置加上回溯
cout << queen.count << endl;
}
return 0;
} */
/*#include<iostream>
using namespace std;
int count=0;
void f(int t){
if(t>0) f(t-1);
else count++;
}
int main(){
f(3);
cout<<count<<endl;
} */
八皇后问题 2017 4 24