8皇后问题,回溯法编程实现。
#include<iostream>
using namespace std;
int x[9]={0,0,0,0,0,0,0,0,0};
int sum=0;
bool place(int k)
{
for(int j=1;j<k;j++)
{
if((abs(k-j)==abs(x[k]-x[j]))||(x[j]==x[k]))
return false;
}
return true;
}
void backtrack(int t)
{
if(t>8)
{
sum++;
cout<<"方法"<<sum<<":"<<endl;
for(int i=1;i<9;i++)
{
for(int j=1;j<9;j++)
{
if(x[i]==j) cout<<" 1";
else cout<<" 0";
}
cout<<endl;
}
cout<<endl;
}
else
{
for(int i=1;i<9;i++)
{
x[t]=i;
if(place(t)) backtrack(t+1);
}
}
}
int main()
{
backtrack(1);
cout<<"共有"<<sum<<"种方法。"<<endl;
return 0;
}
仅作留档。