n皇后问题求解
回溯算法求解n皇后问题
下面展示一些 内联代码片
。
#include<iostream>
using namespace std;
#define n 8
int pos[n];
bool isLegal(int x){ //用于判断放入第x个皇后是否会产生冲突
if(x==0) return true;
else{
for(int i=0;i<x;i++){
for(int ii=i+1;ii<=x;ii++){
if(pos[i]==pos[ii]||pos[i]-pos[ii]==i-ii||pos[i]-pos[ii]==ii-i)
return false;
}
}
}
return true;
}
void output(){ //打印合理的摆放方法
static int sum=0;
printf("第%d种方法\n",++sum);
for(int x=0;x<n;x++){
for(int i=0;i<n;i++) cout<<"----";
cout<<"-"<<endl;
for(int i=0;i<n;i++){
if(pos[x]==i) cout<<"| $ ";
else cout<<"| ";
}
cout<<"|"<<endl;
}
for(int i=0;i<n;i++) cout<<"----";
cout<<"-"<<endl;
cout<<endl;
cout<<endl;
}
void func(int x){ //***回溯求解***
if(x==n){
output();
}else{
for(int i=0;i<n;i++){
pos[x]=i;
if(isLegal(x))
func(x+1);
}
}
}
int main(){
cout<<"n皇后算法设计"<<endl;
func(0);
return 0;
}