深度优先检索:单词搜索

问题:

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

 

思想:

深度优先算法加回溯算法完成

 

代码:

 

class Solution {
    public boolean exist(char[][] board, String word) {

        if(board.length < 1){
            return false;
        }
        int n = board.length;
        int m = board[0].length;

        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                if(dfs(board,word,0,i,j)){
                    return true;
                }
            }
        }
        return false;
    }
    public boolean dfs(char[][] board,String word,int index,int x,int y){
        if(x>=board.length || x < 0||y >=board[0].length||y<0||board[x][y]=='#'||board[x][y] != word.charAt(index)){
            return false;
        }

        if(index == word.length() - 1){
            return true;
        }else{
            char temp = board[x][y];
            board[x][y] = '#';
            boolean flag = dfs(board,word,index+1,x+1,y)||dfs(board,word,index+1,x-1,y) || dfs(board,word,index+1,x,y-1) || dfs(board,word,index+1,x,y+1);
            board[x][y] = temp;
            return flag;
        }

    }
}

 

posted @ 2025-09-24 10:42  我刀呢?  阅读(10)  评论(0)    收藏  举报