N皇后問題的非遞歸版本:
#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
const int N=4;
vector<int> rowPut(N+1,0);
void print()
{
vector<vector<char> > grid(N,vector<char>(N,'.'));
for(int i=1;i<=N;i++)
grid[i-1][ rowPut[i] -1] ='Q';
for(int i=0;i<N;i++)
{
ostream_iterator<char> os( cout, " " );
copy(grid[i].begin(),grid[i].end(),os);
cout<<endl;
}
}
void NQueue()
{
fill(rowPut.begin(),rowPut.end(),0);
for(int row=1;row<=N;row++)
{
int col=0;
for(col=rowPut[row]+1;col<=N;col++)
{
//check;
int ok=1;
for(int i=1;i<row;i++)
{
if ( rowPut[i]==col|| row-i == abs(col-rowPut[i]))
{
ok=0;
break;
}
}
if (ok )
{
rowPut[row]=col;
if ( row==N )
print();
else
{
break;
}
}
}
if ( col> N )
{
rowPut[row]=0;
row-=2;
}
if ( row==-1 )
break;
}
}
int main()
{
NQueue();
system("pause");
}