n皇后问题的非递归迭代算法(C++实现)
来源:互联网 发布:mac 浏览器兼容模式 编辑:程序博客网 时间:2024/05/22 00:17
//n皇后问题的非递归迭代算法
#include <iostream>
#include <cmath>
using namespace std;
class NQueen
{
private:
int numOfQueen;//the number of queens
int numOfanswer;//the number of answers
int *queen;
public:
NQueen();
NQueen(int m);
~NQueen();
bool place(int k);
void backtrack();
void showQueen();
};
NQueen::NQueen()
{
numOfQueen = 0;
numOfanswer = 0;
queen = new int [1];
}
NQueen::NQueen(int m)
{
numOfQueen = m;
numOfanswer = 0;
queen = new int [m+1];
for(int i=0;i<=m;i++)
{
queen[i]=0;
}
}
NQueen::~NQueen()
{
delete []queen;
cout<<"queens are deleted!"<<endl;
}
void NQueen::showQueen()
{
for(int i=1;i<=numOfQueen;i++)
cout<<queen[i]<<" ";
cout<<endl;
}
bool NQueen::place(int k) //the constraint function
{
for (int j=1; j<k; j++)
if((fabs(k-j)==fabs(queen[j]-queen[k]))||(queen[j]==queen[k]))
return false;
return true;
}
void NQueen::backtrack() //非递归回溯法
{
queen[1]=0;
int k=1;
while(k>0)
{
queen[k]+=1;
while((queen[k]<=numOfQueen)&&(!place(k)))
queen[k]+=1;
if(queen[k]<=numOfQueen)
{
if(k==numOfQueen)//到达叶结点,找到可行解
{
numOfanswer++;
showQueen();
}
else //进入子结点
{
k++;
queen[k]=0;
}
}
else k--; //返回至父节点
}
cout<<"the number of the solutions:"<<numOfanswer<<endl<<endl;
}
int main()
{
int m1=4,m2=5;
NQueen Q1(m1);
cout<<"the number of queens are :"<<m1<<endl;
Q1.backtrack();
NQueen *Q2 = new NQueen(m2);
cout<<"the number of queens are :"<<m2<<endl;
Q2->backtrack();
NQueen Q3(6);
cout<<"the number of queens are :"<<6<<endl;
Q3.backtrack();
NQueen *Q4 = new NQueen(5);
cout<<"the number of queens are :"<<"5"<<endl;
Q4->backtrack();
return 0;
}
#include <iostream>
#include <cmath>
using namespace std;
class NQueen
{
private:
int numOfQueen;//the number of queens
int numOfanswer;//the number of answers
int *queen;
public:
NQueen();
NQueen(int m);
~NQueen();
bool place(int k);
void backtrack();
void showQueen();
};
NQueen::NQueen()
{
numOfQueen = 0;
numOfanswer = 0;
queen = new int [1];
}
NQueen::NQueen(int m)
{
numOfQueen = m;
numOfanswer = 0;
queen = new int [m+1];
for(int i=0;i<=m;i++)
{
queen[i]=0;
}
}
NQueen::~NQueen()
{
delete []queen;
cout<<"queens are deleted!"<<endl;
}
void NQueen::showQueen()
{
for(int i=1;i<=numOfQueen;i++)
cout<<queen[i]<<" ";
cout<<endl;
}
bool NQueen::place(int k) //the constraint function
{
for (int j=1; j<k; j++)
if((fabs(k-j)==fabs(queen[j]-queen[k]))||(queen[j]==queen[k]))
return false;
return true;
}
void NQueen::backtrack() //非递归回溯法
{
queen[1]=0;
int k=1;
while(k>0)
{
queen[k]+=1;
while((queen[k]<=numOfQueen)&&(!place(k)))
queen[k]+=1;
if(queen[k]<=numOfQueen)
{
if(k==numOfQueen)//到达叶结点,找到可行解
{
numOfanswer++;
showQueen();
}
else //进入子结点
{
k++;
queen[k]=0;
}
}
else k--; //返回至父节点
}
cout<<"the number of the solutions:"<<numOfanswer<<endl<<endl;
}
int main()
{
int m1=4,m2=5;
NQueen Q1(m1);
cout<<"the number of queens are :"<<m1<<endl;
Q1.backtrack();
NQueen *Q2 = new NQueen(m2);
cout<<"the number of queens are :"<<m2<<endl;
Q2->backtrack();
NQueen Q3(6);
cout<<"the number of queens are :"<<6<<endl;
Q3.backtrack();
NQueen *Q4 = new NQueen(5);
cout<<"the number of queens are :"<<"5"<<endl;
Q4->backtrack();
return 0;
}
- n皇后问题的非递归迭代算法(C++实现)
- n皇后问题的递归与迭代算法
- N皇后问题的非递归算法
- 关于N皇后问题的非递归算法浅析
- java实现N皇后迭代算法
- 八皇后问题的非递归算法实现
- 八皇后问题的非递归算法
- N皇后的迭代实现
- 非递归回溯算法求解n-皇后问题
- C递归的N皇后问题.
- N皇后问题的递归与非递归解法
- N皇后问题的非递归回溯和递归回溯
- N皇后问题的递归回溯实现
- 八皇后问题的递归算法和非递归算法实现
- 递归实现n皇后问题
- NOJ1267 N皇后(非递归算法)
- NOJ1267 N皇后(非递归算法)
- 非递归形式的N皇后问题---用C#实现,VS2008可以执行
- SAP MM 移动类型-入门篇
- duilib加入Grid支持
- 视频资源下载网站汇集
- 加快网站速度,教你如何为dedecms开启Gzip压缩
- UBIFS烧写部分笔记
- n皇后问题的非递归迭代算法(C++实现)
- IT软件项目中的沟通管理
- CFE常用引导命令
- 让IOS应用从容地崩溃
- 红颜若惜的伤感爱情日志:有多少幸福,有多少甜蜜
- Node.js零起点开发(六)-处理POST请求
- 项目管理类似恋爱中感
- Ruby on Rails 入门之:(24) Ruby 中数据持久化、数据库操作
- SharedPreferences跨应用读取数据问题