八皇后问题解决思路

告诉我主要思路就行。。。注意是思路不是源代码!... 告诉我主要思路就行。。。
注意是思路 不是源代码!
展开
 我来答
百度网友cc8aa0f
推荐于2017-12-15 · 超过23用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:43.6万
展开全部

先声明我们根据条件可以知道皇后肯定是每行都有且只有一个所以我们创建一个数组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表示。

这是我自己的体会 ;  里面可能有写表述不当的地方要是不懂可以来问我!(第一次回答这么长的问题)

iehx
2011-10-17 · TA获得超过278个赞
知道小有建树答主
回答量:387
采纳率:0%
帮助的人:442万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式