您的位置:首页 > 其它

经典回溯问题----n皇后

2013-11-08 01:08 176 查看
n皇后问题不用多说,基本都知道。回溯算法也不用多说,还是比较简单的,给我的感觉就是不停的找一颗子树或一个排列,并加上判断以回溯。

/*
*	经典回溯问题-----n皇后
*/

#include<iostream>
using namespace std;

#define MAX 1024

int N;
int column[MAX];//每行对应的列值

int sum=0;
bool Place(int row,int col)//判断是否该行可以放置皇后
{
int i=1;
for(i;i<row;i++)
{
if((column[i]-col)==(i-row)||(column[i]-col)==(row-i)||column[i]==col)
return false;
}
return true;
}

void backTrace(int k)//回溯函数
{
int i;
if(k>N)
{
cout<<"路径"<<++sum<<"序列为: ";
for(i=1;i<=N;i++)
cout<<column[i]<<" ";
cout<<endl;
}
else
{
for(i=1;i<=N;i++)
{
if(Place(k,i))
{
column[k]=i;
backTrace(k+1);
}
}
}
}
void main()
{
cout<<"输入皇后数:";
cin>>N;
backTrace(1);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: