博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
八皇后问题 思路
阅读量:6156 次
发布时间:2019-06-21

本文共 800 字,大约阅读时间需要 2 分钟。

先声明我们根据条件可以知道皇后肯定是每行都有且只有一个所以我们创建一个数组x[t]让数组角标表示八皇后的行,用这个角标对应的数组值来确定这个皇后在这行的那一列。

我们用递归来做:
这问题要求皇后所在的位置必须和其他皇后的位置不在同一行、列还有 把两个皇后看成点其|斜率|=1
所以我们就要写这个限定条件用一个函数来实现:函数内对没一个已经放好的皇后的位置进行判断,所以就要有个循环。
我们既然是用递归来解决问题那就要把这个问题分成一个个相同的小问题来实现对吧!
这小问题是什么呢,不难发现我们要在8*8的方格里放好8个皇后那我们就要知道在8(列)*7(行)是怎么放的在有我们事先写好的判断函数放好最后行就搞定了;以此类推我们要知道8*7的怎么方的我们就要知道8*6是怎么样的就好了。。。。。。
所以我们是以一行怎么放作为一个单元
那好我们就去建一个可以放好一行的函数backtrack(int t)里面的t表示是第几行,在main函数调用的时候第一次传进来的是0也就是从第一行开始判断。
我们就开始写函数体了:
       没一行有8个位置可以放每一个位置我们都要去判断一下所以我们就用循环来搞定。
       在这个循环里面我们让x[t]=i也就是从这一行的第一个开始判断。放好后就要去判断
       是否符合条件。如果符合条件我们就在调用这个函数本身backtrack不过穿进去的参数
       是t+1也就是下一行的意思。
在进行判断下一行之前我们要判断一下t是不是等于8也就是已经是最后一行了,如果是最后一行了我们就可以将其进行输出。打印8*8的矩阵(提示在写一个函数)皇后的位置用1表示出来没有的用0表示。
这是我自己的体会,里面可能有写表述不当的地方要是不懂可以来问我!(第一次回答这么长的问题)

转载于:https://www.cnblogs.com/jack204/archive/2011/10/18/2215987.html

你可能感兴趣的文章
简洁优雅地实现夜间模式
查看>>
react学习总结
查看>>
在soapui上踩过的坑
查看>>
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>
Maven编译时跳过Test
查看>>
Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
查看>>
Apache通过mod_php5支持PHP
查看>>
java学习:jdbc连接示例
查看>>
Silverlight 如何手动打包xap
查看>>
Javascript一些小细节
查看>>
禁用ViewState
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>
nilfs (a continuent snapshot file system) used with PostgreSQL
查看>>
【SICP练习】150 练习4.6
查看>>
HTTP缓存应用
查看>>
KubeEdge向左,K3S向右
查看>>
DTCC2013:基于网络监听数据库安全审计
查看>>
CCNA考试要点大搜集(二)
查看>>
ajax查询数据库时数据无法更新的问题
查看>>