八皇后问题
#include<iostream>
using namespace std;
/*************用数组下标保存行号,数组内容保存列号********************/
bool judge(int a[],int n)
{
int k=a[n]+n;
int j=a[n]-n;
for(int i=0;i<n;i++)
{
if(a[i]==a[n])
return false;
if(k==a[i]+i)
return false;
if(j==a[i]-i)
return false;
}
return true;
}
void output(int a[],int n)
{
for(int i=0;i<n;i++)
cout<<a[i];
cout<<endl;
}
/*************a为棋盘状态,i为当前行数,n为棋盘大小************************/
void Trial(int a[],int i,int n)
{
if(i>=n)
output(a,n);
else
{
for(int j=0;j<n;j++)
{
a[i]=j;
if(judge(a,i))
Trial(a,i+1,n);
}
}
}
int main()
{
int a[8];
Trial(a,0,8);
return 0;
}