回溯法解决 n皇后问题

n皇后问题

问题:
nxn的棋盘上摆n个皇后,要求:任意两个皇后不能冲突,即任意两个皇后不在同一行、同一列或者同一斜线上。


题目剖析

  1. 棋盘上的每一行都要有一个皇后
  2. 任意两个皇后不能在同一列、同一行、同一斜线
  3. 假设是4X4的棋盘,要判定皇后是否能够放在第3行第1列,那么就要判断下图直线所穿过的每个格子时候有皇后
    在这里插入图片描述

算法思想

  1. 将第i个皇后摆放在第i行,i从1开始,每个皇后都从第1列开始尝试。
  2. 判断当前摆放的皇后是否与前面的皇后存在冲突。
  3. 如果不冲突则摆放,然后继续摆放下一行的皇后
  4. 如果冲突则考虑下一列,如果该行皇后到第n列都没有合适位置,则回溯到上一个皇后,尝试在原来位置的下一个位置继续尝试摆放皇后。
  5. 直到i等于n时,就是一组摆放方案。

解决难点问题

  1. 如何判断是否在同一列
  2. 如何判断是否在同一列

我们以一个数组queen[i]来记录第i个皇后的位置【举个例子:queen[1]=3就是第1行第3列的皇后】

  1. 解决问题1就只需要将当前皇后的去与之前所有皇后的去比较,如果相等就是存在冲突。
  2. 解决问题2在这里插入图片描述

代码实现

#include<stdio.h>
#include
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值