八皇后问题(非递归版)

 #include<iostream>

#include<math.h>
using namespace std;
 
int a[20],n;
 
void output()
{
int i;
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
 
int check(int k)
{
int i;
for(i=1;i<=k-1;i++)
{
if(a[i]==a[k]||(abs(a[i]-a[k])==abs(i-k))) 
return 0;
}
return 1;
}
 
void find(int n)
{
int k;
k=1;
a[1]=0;
while(k>0)
{
a[k]++;
while(a[k]<=n&&check(k)==0)//为第k个皇后搜索位置
a[k]++;
if(a[k]<=n)
{
if(k==n) //找到一组解
output();
else
{
k++;   //前k个皇后找到位置,继续为第k+1个皇后找到位置
a[k]=0; //注意下一个皇后一定要从头开始搜索
}
}
else
k--;
}
}
 
int main()
{
cout<<"请输入一个小于20的正整数:"<<endl;
cin>>n;
find(n);
return 0;
}

你可能感兴趣的:(职场,非递归,八皇后,回溯,休闲)