leetcode Word Search 待解决?
2015-05-14 19:38
246 查看
终于搞定了这个DFS,最近这个DFS写的很不顺手,我一直以为递归这种东西只是在解重构时比较麻烦,现在看来,连最简单的返回true和false的逻辑关系都不能说one hundred present 搞定。
人品啊TLE:
View Code
人品啊TLE:
#include<iostream> #include<vector> using namespace std; bool isLegal(int i, int j, vector<vector<char>> board) { int H = board.size(); int L = board[0].size(); if (i >= 0 && i < H&&j >= 0 && j < L) return true; return false; } bool searchWord(vector<vector<char>> board, vector<vector<bool>> visited, string word, int i, int j, int index) { if (index >= word.length()) { return true; } /*if (word[index] == board[i][j]) {*/ visited[i][j] = true; int dx[4] = { 1, 0, -1, 0 }; int dy[4] = { 0, 1, 0, -1 }; for (int x = 0; x < 4; ++x) { int ii = i + dx[x]; int jj = j + dy[x]; if (isLegal(ii, jj, board) && !visited[ii][jj] && board[ii][jj] == word[index] && searchWord(board, visited, word, ii, jj, index + 1)) return true; } /*if (isLegal(i - 1, j, board) && !visited[i - 1][j] && board[i - 1][j]==word[index] && searchWord(board, visited, word, i - 1, j, index + 1)) return true; if (isLegal(i, j - 1, board) && !visited[i][j - 1] && board[i][j - 1] == word[index] && searchWord(board, visited, word, i, j - 1, index + 1)) return true; if (isLegal(i + 1, j, board) && !visited[i + 1][j] && board[i + 1][j] == word[index] && searchWord(board, visited, word, i + 1, j, index + 1)) return true; if (isLegal(i, j + 1, board) && !visited[i][j + 1] && board[i][j + 1] == word[index] && searchWord(board, visited, word, i, j + 1, index + 1)) return true;*/ /*}*/ visited[i][j] = false; return false; } bool exist(vector<vector<char>>& board, string word) { if (word.empty()) return false; int H = board.size(); int L = board[0].size(); int i, j; vector<vector<bool>> visited(H, vector<bool>(L, false)); for (i = 0; i < H; i++) { for (j = 0; j < L; j++) { if (word[0]==board[i][j]&&searchWord(board, visited, word, i, j, 1)) { return true; } } } return false; } int main() { char boardArray[][4] = { { 'A', 'B', 'C', 'E' }, { 'S', 'F', 'C', 'S' }, { 'A', 'D', 'E', 'E' } }; vector<vector<char>> board1(3); for (int i = 0; i < 3; i++) { vector<char> temp(4); temp[0] = 'A'; board1[i] = temp; for (int j = 0; j < 4; j++) { board1[i][j] = boardArray[i][j]; } } if (exist(board1, "ABCCED")) cout << 1<<endl; else cout << 0 << endl; }
View Code
相关文章推荐
- leetcode JAVA Word Search 难度系数3 3.28
- leetcode_498. Diagonal Traverse ? 待解决
- [LeetCode]Word Search
- LeetCode-79-Word Search(回溯法)-Medium
- leetcode_473. Matchsticks to Square ? 待解决
- leetcode[79]Word Search
- [LeetCode] Word Search
- [leetcode]Word Search
- 【一天一道LeetCode】#79. Word Search
- LeetCode 79 Word Search (Python详解及实现)
- LeetCode-79-Word Search 爆搜
- 《leetCode》:Word Search
- Leetcode--word search
- Leetcode 79 Word Search
- LeetCode - Word Search
- leetcode_491. Increasing Subsequences ? 待解决
- Leetcode:Word Search
- 回溯之Leetcode79——Word Search
- leetcode_668. Kth Smallest Number in Multiplication Table ? 待解决
- leetcode79. Word Search