您的位置:首页 > 编程语言 > C语言/C++

C++递归问题之二——n皇后问题:以四、八皇后为例,给定n个皇后要求将它们放在一个n维矩阵中,任意两个皇后不能出现在同一行、列、主副对角线上,输出具体的摆放方式

2012-05-04 23:50 701 查看
#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;

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