文章链接: 110. 字符串接龙、 105.有向图的完全可达性、 106. 岛屿的周长
题目链接: 110. 字符串接龙、 105.有向图的完全可达性、 106. 岛屿的周长
110.字符串接龙
思路:
第一步:判断点与点之间的关系,如果两个字符只差一个字母,那就是有链接。
第二步:求起点和终点的最短路径长度,即无向图求最短路。(广搜最为合适,广搜只要搜到了终点,那么一定是最短的路径)
105.有向图的完全可达性
思路:
本题是一个有向图搜索全路径的问题。
用 DFS 和 BFS 都可以。
深搜三部曲:
1.确认递归函数,参数:
用 key 记录当前可以到达的点;
用数组 visited 记录访问过的房间(默认数组里元素都是false,把元素标记为true就是处理 本节点了)。
2.确定终止条件:
写法一:处理当前访问的节点,当前访问的节点如果是 true ,说明是访问过的节点,那就终止本层递归;如果不是true,我们就把它赋值为true,因为这是我们处理本层递归的节点。
写法二:处理下一层访问的节点,而不是当前层。那么就要在 深搜三部曲中第三步:处理目前搜索节点出发的路径的时候对 节点进行处理。
这样的话,就不需要终止条件,而是在 搜索下一个节点的时候,直接判断 下一个节点是否是我们要搜的节点。
3.处理目前搜索节点出发的路径:
本题不需要用到回溯的原因?
本题是需要判断1节点是否能到所有节点,只要将所有遍历过的节点作上标记即可,不用恢复现场(回溯)。
那么什么时候需要恢复现场?
当我们需要搜索一条可行路径的时候,就需要回溯操作,因为只有恢复了现场,才能知道所有可行的路径。而不是因为某个现场被破坏而少走了几条符合条件的可行路径。
注意:回溯是为了恢复现场,为了将用过的条件恢复,再去走下一条路,从而去得出一条符合条件的路。也就是说,只有条件受到影响并且影响到了结果的求解时才回溯。
106.岛屿的周长
思路:
解法一:
遍历每一个空格,遇到岛屿则计算其上下左右的空格情况。
解法二:
结果 result = 岛屿数量 * 4 - cover * 2。(相邻岛屿数量为cover)