leetcode #79 in cpp

Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

For example,
Given board =

[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]

word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.

Solution;

This is a basic DFS search for string. Simply find the first character and perform DFS in 4 direction for next characters.

Code:

class Solution {
public:
int dir[4][2] = {{1,0},{0,1}, {-1, 0}, {0,-1}};

bool exist(vector<vector<char>>& board, string word) {
if(board.empty()) return false;
int m = board.size();
int n = board[0].size();
vector<vector<bool>> visited(m, vector<bool>(n, false));
for(int i = 0; i < m; i ++){
for(int j = 0; j < n; j ++){
if(board[i][j] == word[0]){//find the match of the first character, then start from this point to locate the string
visited[i][j] = true;//note this position as visited. This is because 1 letter could be used once.
if(search(i, j, 1,visited, word, board))
return true;
else visited[i][j] = false;//if next characters not found, go to find another starting point
}
}
}
return false;
}

bool search(int cur_row, int cur_col,int search_pos, vector<vector<bool>> &visited, string &word, vector<vector<char>> &board)
{
if(search_pos >= word.length()) return true;//if searching position is over the string length,
<span style="white-space:pre">						</span>//it means we successfully reach the end
//search for the letter at search_ind
for(int i = 0; i < 4; i ++){//search for 4 directions
int row = cur_row + dir[i][0];
int col = cur_col + dir[i][1];
<span style="white-space:pre">		</span>//see if this position is out of bound and if this position has the character we want to find. If character matches,
<span style="white-space:pre">		</span>// go to the next recurrence for next character
if(row < board.size() && row >=0 && col < board[0].size() && col >= 0 && !visited[row][col] && board[row][col] == word[search_pos]){
visited[row][col] = true;
if(search(row, col, search_pos+1, visited, word, board))
return true;
else
visited[row][col] = false;
}
}
return false;
}
};

LeetCode79——Word Search

2015-11-17 21:53:26

LeetCode79:Word Search

2015-07-02 15:42:11

Leetcode 79 单词搜索 解题报告

2016-05-27 23:54:32

LeetCode-79-Word Search(回溯法)-Medium

2016-03-20 15:07:55

LeetCode 79（Word Search）java

2017-01-04 22:54:22

leetcode 79. Word Search | Java最短代码实现

2016-03-09 12:45:06

LeetCode cpp最新中文题解.pdf

2018年01月10日 866KB 下载

[python]leetcode(79). Word Search

2017-09-19 22:00:21

leetCode 79.Word Search （词搜索） 解题思路和方法

2015-07-22 13:21:15

回溯LeetCode 79 Word Search

2018-06-23 20:48:26