算法笔记 八皇后问题

八皇后一直是一个面试常见的一道题目,接下来我就来对这道题进行说明

在这里插入图片描述
就是能想到的暴力算法,直接使用两次暴力循环来判断。判断皇后出现问题是在于1.在同一行2.同一列,2.不在同一对角线,之后就是迭代,递归的判断。

#include <stdio.h>
#include <stdlib.h>
//我首先分析一下问题,就是八皇后,在一个8*8的矩阵中放8个皇后,也就是一行一个,一列一个
//每行必定有一个,所以从第0行开始,for循环0到n-1个位置都可以放一个,判断是否可以,如果可以的话
//就递归下一行,直到大于8,就总次数大于一。
//以下是伪代码
//首先是一个数组用来存行列,数组下标就是对应的行,数组里的值就是对应的列,如 a[1]=1 就表示在1行1列
//开始写方法来判断,第n个皇后是否合格
int  sum=0;//这是总次数
int i,j;

bool  way(int a[],int n){
    for(int i=0;i<n;i++){
        if(a[i]==a[n]&&abs(i-n)==abs(a[i]-a[n]){
           return false;
        }
    }
    return true;
}
//开始写递归方法
void digui(int n){
    //这个开头是在我结束之后想明白补充上去的,因为每一个递归相当于一层,一层里的加法和累积加法无关
    if(n>8){
        sum++;
    }
    for(i=0;i<8;i++){
        a[n]=i;//输入某一行的某一列
        //开始判断
        if(way(a,n)){//意思就是如果可以的话,那就判断下一行
                digui(n+1);
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值