其他分享
首页 > 其他分享> > 2022-6-25 剑指offer-dfs

2022-6-25 剑指offer-dfs

作者:互联网

剑指 Offer 12. 矩阵中的路径

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

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

 

例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。

 1 class Solution {
 2     int[][] dir={{1,0},{-1,0},{0,1},{0,-1}};
 3     public boolean exist(char[][] board, String word) {
 4         int m=board.length,n=board[0].length;
 5         boolean[][] visited=new boolean[m][n];
 6         for (int i=0;i<m;i++){
 7             for (int j=0;j<n;j++){
 8                 visited[i][j]=true;
 9                 if (dfs(board,i,j,0,word,visited)) return true;
10                 visited[i][j]=false;
11             }
12         }
13         return false;
14     }
15 
16     public boolean dfs(char[][] board,int x,int y,int index,String word,boolean[][] visited){
17         int m=board.length,n=board[0].length;
18         if (board[x][y]!=word.charAt(index)) return false;
19         if (index==word.length()-1) return true;
20         boolean flag=false;
21         for (int i=0;i<dir.length;i++){
22             int dx=x+dir[i][0];
23             int dy=y+dir[i][1];
24             if (dx>=0&&dx<m&&dy>=0&&dy<n&&!visited[dx][dy]&&board[dx][dy]==word.charAt(index+1)){
25                 visited[dx][dy]=true;
26                 flag=flag||dfs(board,dx,dy,index+1,word,visited);
27                 visited[dx][dy]=false;
28             }
29         }
30         return flag;
31     }
32 }

思路:对于每个节点dfs判断是否可以找到单词。

标签:25,word,int,单元格,dfs,单词,boolean,board,2022
来源: https://www.cnblogs.com/benbicao/p/16410911.html