看到这篇文章的标题是不是有点懵呢?
别着急,等我慢慢给你说!
举个例子吧
一个 4*5的数组∈{0,1}
0 1 0 1 0
1 1 0 1 1
1 0 0 1 1
0 1 0 0 0
上下左右斜对角都算相邻 所以答案显而易见 2
那么我们怎样用编程来实现呢? 聪明的读者很快就反应过来的 这这这 不就是DFS么?
没错 但是还需要一点小小的改编
笔试的时候由于平时训练的不够,导致会的题目没写上,所以考完试恶补了一下DFS
在这就大概讲讲思路,因为算法我也没写
这个题用DFS要分方向,我们把八个方向(上,下,左,右,斜上。。。)分别命名为0-7
所以DFS要从这八个方向来深搜,也就是先从最开始向上搜,直到某一个点的上方向没有1了,再从1方向开始搜索,
这样如果某一个点的八个方向都没有1了,因为DFS就是递归,他会自动回到前一个顶点,继续向下一个方向DFS,每走过一个地方都要标记已经走过!并且每次深搜结束将要开启遍历下一个数组元素的时候就要将你的计数器+1,最后遍历完整个数组之后,cout<<count;就行了!!!!!
当然也可以用栈来实现,跟讲到栈那里的迷宫问题类似,可以考虑用c++的STL <stack> 好用的一批!
好吧 最近实在是没时间,等有空了把这个代码的坑填上!