一起做做C语言题呗,看你能不能马上有代码逻辑。(二)

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。

一起做做C语言题呗,看你能不能马上有代码逻辑。(二)

思路:

对于八皇后的求解可采用回溯算法,从上至下依次在每一行放置皇后,进行搜索,若在某一行的任意一列放置皇后均不能满足要求,则不再向下搜索,而进行回溯,回溯至有其他列可放置皇后的一行,再向下搜索,直到搜索至最后一行,找到可行解,输出。

可以使用递归函数实现上述回溯算法,递归函数用于求解在某一行放置皇后,具体代码如下所示

一起做做C语言题呗,看你能不能马上有代码逻辑。(二)

一起做做C语言题呗,看你能不能马上有代码逻辑。(二)

一起做做C语言题呗,看你能不能马上有代码逻辑。(二)

你想到的什么方案解决呢??不要吝啬,分享出来,大家一起讨论讨论。还有很多很好的方案,这里只是抛砖引玉了。


分享到:


相關文章: