回溯法之N后问题
参考:http://www.cnblogs.com/hustcat/archive/2008/04/09/1144645.html
N后问题的描述:在N*N的方格中,放置N个皇后使得彼此不受攻击,即任意两个皇后不能在同一行、同一列或者同一条对角线上。
典型的搜索图:

典型的问题是八皇后问题:
代码:
#include "stdafx.h"
#include<iostream>
using namespace std;
#define N 9
int x[N+1];
//输出结果
void Output()
{
for(int i=1;i<=N;i++)
{
cout<<"("<<i<<","<<x[i]<<")"<<endl;
}
printf("\n");
}
//求解函数
void Queen(int i,int n)
{
if(i>n)
Output();
else
{
for(int j=1;j<=n;++j)
{
int k=1;
x[i]=j;
while(k<i)
{
if((x[k]-x[i])*(abs(x[k]-x[i])-abs(k-i))!=0)
{
k++;
if(k==i)
Queen(i+1,n);
}
else
{
break;
}
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
for(int i=1;i<=N;i++)
{
x[1]=i; //设置第一行
Queen(2,N);
}
return 0;
}

浙公网安备 33010602011771号