深度优先搜索(DFS)是最常用的搜索算法之一,俗称一条路走到黑。
在一般的搜索题中如果不是卡数据点的题目一般都可以直接用深搜来做,深搜也可以用某些题目的骗分【挑眉
在进行搜索的时候,选择一个没有被搜过的结点,按照深度优先,一直往该结点的后续路径结点进行访问,直到该路径的最后一个结点,然后再从未被访问的邻结点进行深度优先搜索,重复以上过程,直至所有点都被访问,搜索结束。【搬百度qwq
深搜对于解决迷宫、n皇后问题很舒服,比如给出下面一个迷宫
001
011
000
其中1代表障碍物,0代表可通行的路。对于这个迷宫图来说,我们要从左上角走到右下角用深搜的话,若先由(1,1)向右走,走到(1,2)后往右(1,3)是障碍物,不可行,往下走(2,2)也是障碍物,而上方没有路,所以就要回溯到(1,1),此时,(1,2)方向的路已经走完了,从(1,1)就只剩了往下的一条路。这样说是不是很好理解?
那么我们来看一下最经典的八皇后的问题。八皇后是一个很老的题了,貌似是19世纪提出的,对于八皇后问题用数学来解答那就很爽了【滑稽】不过我们一个深搜全搞定( •̀ ω •́ )
https://www.luogu.org/problemnew/show/P1219
这是洛谷上的n皇后问题,不过这n不能太大,不然你懂的。
题目中说每一个皇后攻击范围是她所在的行、列和对角线。
偷来洛谷的图( ̄▽ ̄)
我们来看这样一个规律,其余的皇后我们不看,现在假设只有(5,3)这个点上的皇后
那么意味着整个第五行和第三列以及她的对角线都在她的攻击范围内。行和列很好表示,那么对角线怎么弄呢?
这时候我们仔细观察,(5,