您的位置:首页 > 其它

八皇后问题递归求解二

2015-03-06 16:40 369 查看
#include<iostream.h>

#include<stdio.h>

#define N 8

int queen

;

int count=1; //用来统计总共有多少种算法

int queennumber=1; //用来计算是否达到了八个皇后

void createqueen(){ //创造棋盘

int i=0;

int j=0;

for(;i<N;i++){

for(j=0;j<N;j++)

queen[i][j]=0;}

}

void printqueen(){ //输出棋盘

int i=0;

int j=0;

for(;i<N;i++){

for(j=0;j<N;j++){

cout<<queen[i][j];

}

cout<<endl;

}

cout<<endl;

//getchar();

count++;

cout<<count-1<<endl;

}

bool checkqueen(int x,int y){ //更改棋局
for(int i=1;(x-i)>=0;i++)

{if(queen[x-i][y]==1)

return false;}

i=1;

while(x-i>=0&&y+i<N){

if(queen[x-i][y+i]==1)

return false;

i++;}

i=1;

while(x-i>=0&&y-i>=0){

if(queen[x-i][y-i]==1)

return false;

i++;}

return true;

}

void run(int x){

bool is=false;

for(int i=0;i<N;i++){

if(x<N)

is=checkqueen(x+1,i);

if(is==true){

queen[x+1][i]=1;

queennumber++;

if(queennumber==N)

printqueen();

run(x+1);

queennumber--;

queen[x+1][i]=0;

}

}

}

void main(){

for(int i=0;i<N;i++){

createqueen();

queen[0][i]=1;

queennumber=1;

run(0);

//getchar();

}

cout<<endl<<count-1<<endl;

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