作业帮 > 综合 > 作业

求C语言中的回溯法,举一个简单的小例子,说明回溯法的运行过程!

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/26 07:49:52
求C语言中的回溯法,举一个简单的小例子,说明回溯法的运行过程!
求C语言中的回溯法,举一个简单的小例子,说明回溯法的运行过程!
比如八皇后问题,要在8×8的棋盘上放置8个皇后,使8个皇后不相互攻击,即使所有皇后不能位于同一横行、同一竖行或同一斜行.我们在程序中,首先考虑在第一列放置第一个皇后的情况,有8种放法.接下来考虑在第二行放第二个皇后,也是有8种放法,但是有一些放法是不合法,因为这些方法使第一个皇后和第二个皇后相互攻击了.对于这样一些产生了矛盾的算法,我们必须马上把它和它的解空间子树剪掉,这就是“剪枝”.如果发现在第j列放置第j个皇后的所有情况都会与前面出现矛盾时,那这时候我们要回到第j-1列,考虑换一个位置放第j-1个皇后,这就是回溯.
以上答案,纯粹逐字打出来的.
再问: 1 6 3 4 2 3 6 5 2 6 4 5 6 3 5 6在这十六和数中找四个数,使其和最小。要求:四个数不同在任何一行或一列。 例如每行中的数字6.怎么个法来做?
再答: 考虑在第一行中找一个数,有4种选法。 对于第一行的每种选法,在第二行中都有4种选法,但其中有些不合法,比如第一行选择了1,第二行选择了2。对于这些不合法的位置,我们不考虑它,即“剪枝”。 用一个变量记录当前找到的最小值,如果当前路径上经过的数的和已经比当前最小值还大,那么也可以不用考虑。 遍历所有可能情况,经过上述适当的剪枝后,最终得到问题的解。
再问: 那如何用C语言编程呢?谢啦!