C++递归问题之二——n皇后问题:以四、八皇后为例,给定n个皇后要求将它们放在一个n维矩阵中,任意两个皇后不能出现在同一行、列、主副对角线上,输出具体的摆放方式
来源:互联网 发布:php商城源码免费下载 编辑:程序博客网 时间:2024/05/16 07:41
#include <iostream>
using namespace std;
class Queen{
public:
Queen(){}
Queen(int i):Qnum(i){}
~Queen(){}
void SetQnum(int i){
Qnum=i;
}
void FindPos();
private:
enum{MAX=10};
int col[MAX];
int M[2*MAX];
int S[2*MAX];
int matrix[MAX][MAX];
int Qnum;
int count;
void Find(int i);
void Init();
};
void Queen::FindPos(){
Init();
Find(0);
}
void Queen::Init(){
count=0;
for(int i=0;i<MAX;++i){
col[i]=0;
for(int j=0;j<MAX;++j)matrix[i][j]=0;
}
for(i=0;i<2*MAX;++i)M[i]=S[i]=0;
}
void Queen::Find(int i){
for(int j=0;j<Qnum;++j){
if(col[j]==0&&M[i-j+Qnum-1]==0&&S[i+j]==0){//列、主对角线、辅对角线,-1起标示作用在矩阵中表示放皇后的位置
col[j]=-1;
M[i-j+Qnum-1]=-1;
S[i+j]=-1;
matrix[i][j]=-1;
if(i<Qnum-1)Find(i+1);
else{
cout<<"No."<<++count<<" result:"<<endl;
for(int iL=0;iL<Qnum;++iL){
for(int jC=0;jC<Qnum;++jC)
cout<<matrix[iL][jC]<<'\t';
cout<<endl;
}
cout<<endl;
}
col[j]=0;
M[i-j+Qnum-1]=0;
S[i+j]=0;
matrix[i][j]=0;
}
}
}
int main(){
cout<<"Input the num of queen:"<<endl;//暂时只处理4、8皇后
int num;
cin>>num;
Queen obj(num);
obj.FindPos();
return 0;
}
using namespace std;
class Queen{
public:
Queen(){}
Queen(int i):Qnum(i){}
~Queen(){}
void SetQnum(int i){
Qnum=i;
}
void FindPos();
private:
enum{MAX=10};
int col[MAX];
int M[2*MAX];
int S[2*MAX];
int matrix[MAX][MAX];
int Qnum;
int count;
void Find(int i);
void Init();
};
void Queen::FindPos(){
Init();
Find(0);
}
void Queen::Init(){
count=0;
for(int i=0;i<MAX;++i){
col[i]=0;
for(int j=0;j<MAX;++j)matrix[i][j]=0;
}
for(i=0;i<2*MAX;++i)M[i]=S[i]=0;
}
void Queen::Find(int i){
for(int j=0;j<Qnum;++j){
if(col[j]==0&&M[i-j+Qnum-1]==0&&S[i+j]==0){//列、主对角线、辅对角线,-1起标示作用在矩阵中表示放皇后的位置
col[j]=-1;
M[i-j+Qnum-1]=-1;
S[i+j]=-1;
matrix[i][j]=-1;
if(i<Qnum-1)Find(i+1);
else{
cout<<"No."<<++count<<" result:"<<endl;
for(int iL=0;iL<Qnum;++iL){
for(int jC=0;jC<Qnum;++jC)
cout<<matrix[iL][jC]<<'\t';
cout<<endl;
}
cout<<endl;
}
col[j]=0;
M[i-j+Qnum-1]=0;
S[i+j]=0;
matrix[i][j]=0;
}
}
}
int main(){
cout<<"Input the num of queen:"<<endl;//暂时只处理4、8皇后
int num;
cin>>num;
Queen obj(num);
obj.FindPos();
return 0;
}
- C++递归问题之二——n皇后问题:以四、八皇后为例,给定n个皇后要求将它们放在一个n维矩阵中,任意两个皇后不能出现在同一行、列、主副对角线上,输出具体的摆放方式
- 八皇后问题—>n皇后问题
- 2013上机二 八皇后问题8*8 任意两个皇后不在同行同列对角
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- 八皇后、N皇后问题的求解。
- n皇后问题【递归】
- 递归 N皇后问题
- N皇后问题 (递归)
- 递归---n皇后问题
- N个皇后问题!!!
- 八皇后问题(N皇后问题)
- 【C++】n皇后问题
- C递归的N皇后问题.
- 八皇后非递归(仅使用一个数组且可扩展为N皇后问题)
- 回溯法—八皇后问题(N皇后)
- 八皇后及n皇后问题
- 八皇后乃至N皇后问题
- 面向对象设计原则概述
- 系统启动篇(三)[上]
- Android自定义View研究(五)--View的大小
- jQuery获得网页基本信息
- DM8168芯片级资源(一)
- C++递归问题之二——n皇后问题:以四、八皇后为例,给定n个皇后要求将它们放在一个n维矩阵中,任意两个皇后不能出现在同一行、列、主副对角线上,输出具体的摆放方式
- C++ 常考算法
- OpenJWeb中的声明式事务编程
- 面向对象设计原则之单一职责原则
- Qt之QTimer----每秒都有自己要干的事
- JSP的九个内置对象
- 连接到SQL2008出现的sqljdbc版本太低
- 读书笔记之高焕堂《Android 应用框架原理与程式设计36技》
- JS将汉字转换为拼音