八皇后问题递归求解二

#include<iostream.h>
#include<stdio.h>
#define N 8
int queen[N][N];
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值