dfs+回溯做题笔记

题目链接:t矩阵中的路径_牛客题霸_牛客网

参考代码:

    import java.util.*;


    public class Solution {
        /**
        * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
        *
        * 
        * @param matrix char字符型二维数组 
        * @param word string字符串 
        * @return bool布尔型
        */
        char[][] m;
        char[] s;
        boolean[][] visited;
        
        public boolean hasPath (char[][] matrix, String word) {
            // write code here
            m = matrix;
            s = word.toCharArray();
            int row = matrix.length;
            int col = matrix[0].length;
            for(int i = 0;i= m.length || actualCol <0 || actualCol >= m[0].length) {
                    continue;
                }
                // 判断是否来过
                if (visited[actualRow][actualCol]) {
                    continue;
                }
                // 字符相等则进行dfs
                if (s[depth] == m[actualRow][actualCol]) {
                    // 更改计数器和参观数组
                    visited[actualRow][actualCol] = true;
                    boolean ans = dfs(actualRow,actualCol,++depth);
                    if (ans) {
                        return ans;
                    }
                    // 一定要记得还原状态
                    depth--;
                    visited[actualRow][actualCol] = false;
                }
            }
            return false;
        }
    }

收获:本题是经典的dfs暴力搜索题,用到了dfs+回溯。

 踩过的坑:

1.dfs需要将循环内的所有可能情况都试一遍,直到找到了才终止循环

dfs+回溯做题笔记_第1张图片

 

2.由于需要回溯,因此在回溯的时候不要忘了将状态还原。例如计数器减一,还原标记数据(boolean[][] visited)

dfs+回溯做题笔记_第2张图片

 

你可能感兴趣的:(深度优先,笔记,算法)