博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
79. Word Search
阅读量:6518 次
发布时间:2019-06-24

本文共 2414 字,大约阅读时间需要 8 分钟。

题目

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.

解析

  • 这道题很容易感觉出来是图的题目,其实本质上还是做深度优先搜索。基本思路就是从某一个元素出发,往上下左右深度搜索是否有相等于word的字符串。这里注意每次从一个元素出发时要重置访问标记(也就是说虽然单次搜索字符不能重复使用,但是每次从一个新的元素出发,字符还是重新可以用的)。
// 79. Word Searchclass Solution_79 {public:    typedef pair
pii; int ajd[8][2] = { { -1, -1 }, { 0, -1 }, { 1, -1 }, { -1, 0 }, { 1, 0 }, { -1, 1 }, { 0, 1 }, {1,1} }; //上下左右,四连通域 bool judgeValid_bug(vector
>& board, string word,int index, int x, int y) { int m = board.size(); int n = board[0].size(); pii p(x,y); queue
que; que.push(p); if (index == word.size()) { return true; } while (!que.empty()) { int size = que.size(); while (size--) { pii temp = que.front(); x = temp.first; y = temp.second; que.pop(); for (int i = 0; i < 8; i++) { if (ajd[i][0] + x >= 0 && (ajd[i][0] + x)
= 0 && (ajd[i][1] + y)
>& board, string word, int index, int x, int y) { int m = board.size(); int n = board[0].size(); if (index >= word.size()) { return true; } if (x < 0 || y < 0 || x >= m || y >= n) { return false; //超出边界 } if (board[x][y]!=word[index]) { return false; } char temp = board[x][y]; board[x][y] = '.'; //节约used[i][j] = true; 空间 //防止从同一位置开始,以后重复使用 bool ret = judgeValid(board,word,index+1,x-1,y)|| judgeValid(board,word,index+1,x,y-1)|| judgeValid(board,word,index+1,x,y+1)|| judgeValid(board,word,index+1,x+1,y); board[x][y] = temp; return ret; } bool exist(vector
>& board, string word) { if (board.empty()) { return false; } if (word.empty()) { return true; } int m = board.size(); int n = board[0].size(); for (int i = 0; i < m;i++) { for (int j = 0; j < n;j++) { if (board[i][j]==word[0]) { if (judgeValid(board,word,0,i,j)) { return true; } } } } return false; }};

题目来源

转载地址:http://xwrfo.baihongyu.com/

你可能感兴趣的文章
xml的解析
查看>>
Flex布局
查看>>
hihoCoder1690 (动态规划)
查看>>
Cap03_项目立项管理
查看>>
在archlinux上搭建twitter storm cluster
查看>>
mysql limit函数
查看>>
c++ 在windows下建立目录
查看>>
linux单独安装oracle客户端及exp/imp工具配置
查看>>
SQL修改表名称
查看>>
poj 1011
查看>>
Poj2752--Seek the Name, Seek the Fame(Kmp → → Next数组应用)
查看>>
[BEC][hujiang] Lesson02 Unit1:Working life ---Reading
查看>>
SQL Server 中 RAISERROR 的用法
查看>>
bupt summer training for 16 #5 ——数据结构
查看>>
Spring安装与入门
查看>>
(OS 64)指定的网络名不再可用,winnt_accept: Asynchronous AcceptEx failed.
查看>>
递归分析
查看>>
Api容器在应用架构演化中的用途
查看>>
java中一个引人深思的匿名内部类
查看>>
vue+ajax+bootstrap+python实现增删改
查看>>