【算法训练】八皇后问题回溯算法求解

题目描述
会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如今有一个8*8的棋盘,如何将 8 个皇后放在棋盘上,使它们谁也不能被吃掉!这就是著名的八皇后问题。

分析:这个问题在求解时可以使用回溯算法去分析问题——在第一行放上棋子以后,递归到第二行,找到一个能放置棋子的位置,将棋子放上后,递归到第三行。。 。。。 依次类推,但是会找到一行,没有办法放置棋子,也就是说,放置位置上,行、列、斜线都已经有棋子了,那么这时就要返回到上一步,重新放置上一步的棋子,再走下一步,直到下一步能放置棋子便好。整个棋盘放好的标志是第八行已经放置了棋子。


使用回溯算法思考后,思路就很清晰了,虽然这个算法时间复杂度不低,但是它属于那种很好理解的思路,代码如下:


#include<stdio.h>
#include<stdlib.h>
//首先定义几个全局的数组来当作存放皇后的标志位
int cnt=0;          //cnt 用来计算解的个数
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值