八皇后

题意:

    有八个来自国际象棋的皇后,要站在同一个棋盘上,有什么办法能让她们不互相吃掉?

    皇后可以横着走,竖着走,斜着走。。。。

思路:

    深搜,判断条件就是会不会打到之前的皇后,一旦摆满8个就可以输出。

    首先要3个数组,第一,二个因为斜着可以往左上和右上两种,所以要开俩个数组,第三个数组就是判断这一例有没有皇后。

行就不需要了,我们只要一行一行放就可以了。

   先解释斜着为什么需要俩个数组。

 

 

我相信大家可以理解我的

画技。。。。。。。。。。。

总之就是这个意思

然后就看看程序吧:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>

using namespace std;
int sc(int);
int print();
int map[9][9]={0},a[9]={0},b[9]={0},c[9]={0};


int sc(int dep)//dep表示第几个皇后
{
    int j;
    for (j=1;j<=8;j++)  //只有八列,所以
      if ((a[dep+j]==0)&&(b[j]==0)&&(c[dep-j+7]==0))
        {
          map[dep][j]=1;//表示这里有一个皇后,后面输出用。

          b[j]=1;
          a[dep+j]=1;
          c[dep-j+7]=1;//加7避免到负数
          if (dep==8)  
          print();
            else sc(dep+1);
          
          b[j]=0;
          a[dep+j]=0;
          c[dep-j+7]=0;
          map[dep][j]=0;
          
        } 
}

int main()
{
    
    sc(1);

   
}
int print()
{
    for (int i=1;i<9;i++)
    {
      for (int j=1; j<9;j++)
    {
       //cout<<map[i,j]<<' ';//  俩种输出方式
       printf("%d ",map[i][j]);
    }
      cout<<endl;
    }   
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值