#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct node
{
int num;
int row;
vector<int>col;
};
int n=4;//皇后数量
int count=1;
int fangzhi(vector<int>col,int i,int j)
{
int flag=1;
int k=0;
while(k<i)
{
if(col[k]==j||abs(col[k]-j)==abs(k-i))
{
flag=0;
}
k++;
}
return flag;
}
void print(node e)
{
if(e.row!=-1)
cout<<"编号:"<<e.num<<"所在位置:"<<"("<<e.row<<","<<e.col[e.row]<<")";
else
{
cout<<"编号:"<<e.num<<"所在位置:"<<"("<<e.row<<","<<-1<<")";
}
}
void solve()
{
int i,j;
node e,el;
queue<node>q;
e.num=count++;
e.row=-1;
q.push(e);
cout<<"进队:";
print(e);
cout<<endl;
while(!q.empty())
{
e=q.front();
q.pop();
cout<<"出队:";
print(e);
cout<<endl;
if(e.row==n-1)
{
cout<<"产生一个解:";
cout<<endl;
for(int i=0;i<n;i++)
{
cout<<"["<<i+1<<","<<e.col[i]+1<<"]"<<endl;
}
return;
}
else
{
for(int j=0;j<n;j++)
{
i=e.row+1;
if(fangzhi(e.col,i,j)==1)
{
el.num=count++;
el.row=i;
el.col=e.col;
el.col.push_back(j);
q.push(el);
cout<<"进队子节点:";
cout<<endl;
print(el);
cout<<endl;
}
}
}
}
}
int main()
{
cout<<"过程:"<<endl;
solve();
return 0;
}
结果: