leetcode - Word Search
2013-12-15 21:00 张汉生 阅读(136) 评论(0) 编辑 收藏 举报
1 class Solution { 2 public: 3 int m, n; 4 bool search(vector<vector<char> > &board, string & word, int x, int y, vector<vector<bool> >&flag, int off){ 5 if (off == word.size()) return true; 6 int dx[4] = { -1, 0, 1, 0 }; 7 int dy[4] = { 0, -1, 0, 1 }; 8 for (int i = 0; i < 4; i++){ 9 int xx = x + dx[i]; 10 int yy = y + dy[i]; 11 if (xx >= 0 && xx < m && yy >= 0 && yy < n && board[xx][yy] == word[off] && !flag[xx][yy]){ 12 flag[xx][yy] = true; 13 if (search(board, word, xx, yy, flag, off + 1)) 14 return true; 15 flag[xx][yy] = false; 16 } 17 } 18 return false; 19 } 20 bool exist(vector<vector<char> > &board, string word) { 21 // IMPORTANT: Please reset any member data you declared, as 22 // the same Solution instance will be reused for each test case. 23 if (board.size() == 0 || board[0].size() == 0) 24 return false; 25 m = board.size(), n = board[0].size(); 26 int len = word.length(); 27 if (len <= 0) 28 return true; 29 vector<vector<bool> >flag = vector<vector<bool> >(m, vector<bool>(n, false)); 30 for (int i = 0; i < m; i++){ 31 for (int j = 0; j < n; j++){ 32 if (board[i][j] != word[0]) 33 continue; 34 flag[i][j] = true; 35 if (search(board, word, i, j, flag, 1)){ 36 return true; 37 } 38 flag[i][j] = false; 39 } 40 } 41 return false; 42 } 43 };