算法设计与应用基础:第十六周(1)
来源:互联网 发布:达州市行知中学 编辑:程序博客网 时间:2024/06/04 19:33
79. Word Search
DescriptionHintsSubmissionsSolutions
- Total Accepted: 122901
- Total Submissions: 468065
- Difficulty: Medium
- Contributor: LeetCode
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
.解题思路:回溯dfs,对于遍历到的每一个点继续遍历它可以达到的其他点,这个过程中如果找到了word就返回ture,否则最后返回false,注意递归调用中维护visited数组(即每次对一个点上锁和解锁。代码如下:
class Solution {public: bool dfs(vector<vector<char>>&board, string word, int count, int row, int col, vector<vector<int>>&visited) { if (count == word.size() - 1) return true; visited[row][col] = 1;//已经访问locked if (row + 1 < board.size() &&visited[row+1][col]==0&& board[row + 1][col] == word[count + 1] ) if (dfs(board, word, count + 1, row + 1, col, visited)) return true; if (row - 1 >= 0 &&visited[row-1][col]==0&& board[row - 1][col] == word[count + 1] ) if (dfs(board, word, count + 1, row - 1, col, visited)) return true; if (col + 1 < board[0].size() &&visited[row][col+1]==0&& board[row][col + 1] == word[count + 1] ) if (dfs(board, word, count + 1, row, col + 1, visited)) return true; if (col - 1 >= 0 &&visited[row][col-1]==0&& board[row][col - 1] == word[count + 1] ) if (dfs(board, word, count + 1, row, col - 1, visited)) return true; visited[row][col] = 0;//失败之后要恢复到未访问的状态 unlocked return false; } public: bool exist(vector<vector<char>>& board, string word) { if (word.size() == 0) return true; int row = board.size(); int col = board[0].size(); vector<vector<int>>visited(row, vector<int>(col)); //0----unvisited //1----visited if (row == 0 || col == 0) return false; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (board[i][j] == word[0]) { if (dfs(board, word, 0, i, j, visited))//开始递归 return true; } } } return false; } };注:这道题一开始是想用非递归来写的,但是因为无法解决回路的问题,最后不得已用了递归的方法,非递归的方法想出来了再补充。
阅读全文
0 0
- 算法设计与应用基础:第十六周(1)
- 算法设计与应用基础:第十六周(1)
- 算法设计与应用基础:第十六周
- 算法设计与结构基础作业第十六周
- 算法设计与应用基础: 第二周(1)
- 算法设计与应用基础:第二周(1)
- 算法设计与应用基础: 第三周(1)
- 算法设计与应用基础: 第五周(1)
- 算法设计与应用基础: 第七周(1)
- 算法设计与应用基础:第八周(1)
- 算法设计与应用基础:第九周(1)
- 算法设计与应用基础: 第十周(1)
- 算法设计与应用基础:第十二周(1)
- 算法设计与应用基础:第十三周(1)
- 算法设计与应用基础:第十七周(1)
- 算法分析与设计第十六周
- 算法设计与应用基础-第二周
- 算法设计与应用基础:第三周
- JS if语句
- Java怎么部署工程及访问不带项目名的工程
- PHP语言性能优化——少使用魔术方法
- MFC的Dialog模式创建窗体以及控件绑定
- 进程间通信——共享内存
- 算法设计与应用基础:第十六周(1)
- leetcode已完成题目索引
- centos7忘记root密码
- C++/MFC-动态链接库(DLL)
- 离别季,思念万里长
- #7 绑定
- JS if else应用 猜数
- Apicoud+vue开发高性能商城APP项目实战教程
- Chrome 插件 一 一个简单的插件示例