回溯算法

回溯法英语backtracking)是暴力搜寻法中的一种。

       回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:

  • 找到一个可能存在的正确的答案
  • 在尝试了所有可能的分步方法后宣告该问题没有答案

在最坏的情况下,回溯法会导致一次复杂度指数时间的计算。

       回溯算法也算是遍历算法的一种,回溯算法是对Brute-Force算法的一种改进算法,一个典型的应用是走迷宫问题,当我们走一个迷宫时,如果无路可走了,那么我们就可以退一步,再在其他的路上尝试一步,如果还是无路可走,那么就再退一步,尝试新的路,直到走到终点或者退回到原点。

 皇后问题:

八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。

八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n当且仅当n = 1或n ≥ 4时问题有解

经典的是8皇后问题,这里我们为了简单,以4皇后为例。

      首先利用回溯算法,先给第一个皇后安排位置,如下图所示,安排在(1,1)然后给第二个皇后安排位置,可知(2,1),(2,2)都会产生冲突,因此可以安排在(2,3),然后安排第三个皇后,在第三行没有合适的位置,因此回溯到第二个皇后,重新安排第二个皇后的位置,安排到(2,4),然后安排第三个皇后到(3,2),安排第四个皇后有冲突,因此要回溯到第三个皇后,可知第三个皇后也就仅此一个位置,无处可改,故继续向上回溯到第二个皇后,也没有位置可更改,因此回溯到第一个皇后,更改第一个皇后的位置,继续上面的做法,直至找到所有皇后的位置,如下图所示。

      这里为什么我们用4皇后做例子呢?因为3皇后是无解的。同时我们也可以看到回溯算法虽然也是Brute-Force,但是它可以避免去搜索很多的不可能的情况,因此算法是优于Brute-Force的。


八皇后问题一共有92个互不相同的解。如果将旋转和对称的解归为一种的话,则一共有12个独立解,具体如下:


abcdefgh
8
Chessboard480.svg
d8 白 后
g7 白 后
c6 白 后
h5 白 后
b4 白 后
e3 白 后
a2 白 后
f1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解1

abcdefgh
8
Chessboard480.svg
e8 白 后
b7 白 后
d6 白 后
g5 白 后
c4 白 后
h3 白 后
f2 白 后
a1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解2

abcdefgh
8
Chessboard480.svg
d8 白 后
b7 白 后
g6 白 后
c5 白 后
f4 白 后
h3 白 后
e2 白 后
a1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解3

abcdefgh
8
Chessboard480.svg
d8 白 后
f7 白 后
h6 白 后
c5 白 后
a4 白 后
g3 白 后
e2 白 后
b1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解4

abcdefgh
8
Chessboard480.svg
c8 白 后
f7 白 后
h6 白 后
a5 白 后
d4 白 后
g3 白 后
e2 白 后
b1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解5

abcdefgh
8
Chessboard480.svg
e8 白 后
c7 白 后
h6 白 后
d5 白 后
g4 白 后
a3 白 后
f2 白 后
b1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解6

abcdefgh
8
Chessboard480.svg
e8 白 后
g7 白 后
d6 白 后
a5 白 后
c4 白 后
h3 白 后
f2 白 后
b1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解7

abcdefgh
8
Chessboard480.svg
d8 白 后
a7 白 后
e6 白 后
h5 白 后
f4 白 后
c3 白 后
g2 白 后
b1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解8

abcdefgh
8
Chessboard480.svg
c8 白 后
f7 白 后
d6 白 后
a5 白 后
h4 白 后
e3 白 后
g2 白 后
b1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解9

abcdefgh
8
Chessboard480.svg
f8 白 后
b7 白 后
g6 白 后
a5 白 后
d4 白 后
h3 白 后
e2 白 后
c1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解10

abcdefgh
8
Chessboard480.svg
d8 白 后
g7 白 后
a6 白 后
h5 白 后
e4 白 后
b3 白 后
f2 白 后
c1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解11

abcdefgh
8
Chessboard480.svg
f8 白 后
d7 白 后
g6 白 后
a5 白 后
h4 白 后
b3 白 后
e2 白 后
c1 白 后
8
77
66
55
44
33
22
11

abcdefgh
独立解12




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值