八皇后问题(2)

//=============Program Description==================================//
//程序文件:queeen.cpp         //
//程序名称:八皇后问题         //
//方    法:递归方法         //
//程序编写:(ExceedStudio)
//======================================================================//


#include<iostream.h>

char borad[8][8];

void printf()
{
 int i,j;
  for (i=0;i<8;i++)
  { for (j=0;j<8;j++)
     cout<<borad[i][j];
   cout<<endl;
  }
}

void fill_up()
{
 int i,j;
 for (i=0;i<8;i++)
  for (j=0;j<8;j++)
   borad[i][j]='x';
}

int check(int x,int y)
{
 int x1=x,y1=y;
 int i;


  for (i=0;i<8;i++)
     if (borad[x][i]=='Q' || borad[i][y]=='Q')
      return 0; //判断行OR列上是未有Q

 while (x1<8 && y1<8)
     {
    
   if (borad[x1+1][y1+1]=='Q' )
       return 0;
    else {
    x1++;
    y1++;
   }
     }
    

 x1=x;
 y1=y;
  
 while (x1>0 && y1>0)
     {
    
   if (borad[x1-1][y1-1]=='Q' )
       return 0;
    else {
    x1--;
    y1--;
   }
     }
    

 x1=x;
 y1=y;
    
      
     while (x1>0 && y1<8)
     {
    
   if (borad[x1-1][y1+1]=='Q' )
       return 0;
    else {
    x1--;
    y1++;
   }
     }
    

 x1=x;
 y1=y;
      
     while (x1<8 && y1>0)
     {
   if (borad[x1+1][y1-1]=='Q' )
       return 0;
    else {
    x1++;
    y1--;
   }
     }
    
    return 1;
   
}


void place(int n)
{
 int i;

  for (i=0;i<8;i++) //控制每一行皇后的位置(列数) 
  {
   
   if (check(n,i)) //以皇后数控制行数~~~~检测此行的每一列是否可以放上Q
   {
     
      
    borad[n][i]='Q'; 

    if (n<7)
     place(n+1); //当少于8个皇后时,则递归下一个!
    else {
     printf(); //否则输出结果
     return;
    }
    
    borad[n][i]='x'; //当最外的for控制着列位置,当这个位置的Q,
       //使得后面排不到8个,这时就要放Q于下一位
    
   }
  }
  
}

int main()
{

 fill_up();
 borad[0][0]='Q';     
 place(1);

 
return 0;
 
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值