首页 > 其他 > 详细

回溯法

时间:2019-03-03 18:33:18      阅读:146      评论:0      收藏:0      [点我收藏+]

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

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

示例:

board =
[
[‘A‘,‘B‘,‘C‘,‘E‘],
[‘S‘,‘F‘,‘C‘,‘S‘],
[‘A‘,‘D‘,‘E‘,‘E‘]
]

给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

 

解答:

 1 public class Solution {
 2 
 3     public static boolean exist(char[][] board, String word) {
 4         if(word.length() > board.length*board[0].length()) {
 5             return false;
 6         }
 7 
 8         boolean[][] boardFlag = new boolean[board.length][board[0].length];
 9         for(int i = 0; i < board.length; i++) {
10             for(int j = 0; j < board[0].length; j++) {
11                 if(find(i, j, board, word, boardFlag)) {
12                     return true;
13                 }
14             }
15         }
16 
17         return false;
18     }
19 
20     public static boolean find(int i, int j, char[][] board, String word, boolean[][] boardFlag) {
21         if(board[i][j] == word.charAt(0) && !boardFlag[i][j]) {
22 
23             boardFlag[i][j] = true;
24 
25             if(word.length-1 == 0) {
26                 return true;
27             }
28 
29             if(j + 1 < board[0].length) {
30                 if(find(i,j+1,board,word.substring(1,word.length()),boardFlag)) return true;
31             }
32 
33             if(j - 1 >= 0) {
34                 if(find(i,j-1,board,word.substring(1,word.length()),boardFlag)) return true;
35             }
36 
37             if (i+1 < board.length) {
38                 if(find(i+1,j,board,word.substring(1,word.length()),boardFlag)) return true;  
39             }
40                 
41             if (i-1 >= 0) {
42                 if(find(i-1,j,board,word.substring(1,word.length()),boardFlag)) return true;  
43             }
44 
45             // important here
46             boardFlag[i][j] = false;
47 
48             return false;
49         }
50     }
51 }

 技术分享图片

 

回溯法

原文:https://www.cnblogs.com/wylwyl/p/10466754.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!