这道题之前一直没敢做,没想到前天用递归一遍过了。

当时为什么想着用递归,而不是dp呢。由于我想到达某个位置的情况有非常多,即使从当前位置開始的搜索是已知的,但之前的状态是如何的也无从得知啊,实话实说,我是不会用dp解这个。。

递归的思路就好说多了,从当前点開始。有上下左右四个位置能够探測,假设探測成功的话,要把当前的位置用其它符号标记出来,以免反复訪问。实际上就是DFS嘛。仅仅只是入口多一些。

须要注意的一点是,每一个点都能够作为起点。所以这个要穷举一下。否则会漏掉情况的。

当然有一种情况走通就能够返回了。剪枝之。

代码又臭又长,只是work:

class Solution {
public:
int row, column;
bool doexist(vector<vector<char> > &board, string &word, int len, int i, int j){
if(len == word.length()) return true;
bool res;
if(i>0&&board[i-1][j] == word[len]){
board[i-1][j] = '.';
res = doexist(board, word, len+1, i-1, j);
if(res) return true;
else board[i-1][j] = word[len];
}
if(i<row-1&&board[i+1][j] == word[len]){
board[i+1][j] = '.';
res = doexist(board, word, len+1, i+1, j);
if(res) return true;
else board[i+1][j] = word[len];
}
if(j>0&&board[i][j-1] == word[len]){
board[i][j-1] = '.';
res = doexist(board, word, len+1, i, j-1);
if(res) return true;
else board[i][j-1] = word[len];
}
if(j<column-1&&board[i][j+1] == word[len]){
board[i][j+1] = '.';
res = doexist(board, word, len+1, i, j+1);
if(res) return true;
else board[i][j+1] = word[len];
}
return false;
}
bool exist(vector<vector<char> > &board, string word) {
row = board.size();
if(row == 0) return false;
column = board[0].size();
char c;
for(int i=0;i<row;i++){
for(int j=0;j<column;j++){
if(board[i][j] == word[0]){
board[i][j] = '.';
if(doexist(board, word, 1, i, j))
return true;
board[i][j] = word[0];
}
}
}
return false;
}
};

最新文章

  1. ABP Zero示例项目登录报错“Empty or invalid anti forgery header token.”问题解决
  2. 在其他系统Iframe中显示SharePoint 页面
  3. chrome调试本地项目, 引用本地javascript文件
  4. javascript多态 - 类形式实现demo
  5. QtCreator动态编译jsoncpp完美支持x86和arm平台
  6. android 开发(百度地图)
  7. linxu c语言 fcntl函数和flock函数区别 【转】
  8. JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里
  9. 《CSAPP》读书杂记 - Chapter 2. Representing and Manipulating Information
  10. ssh连接ubuntu提示连接不上的问题
  11. HYML / CSS部分
  12. OKMX6Q ffmpeg &amp; ffserver
  13. Hive命令及操作
  14. 回去试idea
  15. win10下VM 中centos 安装共享文件
  16. GUI界面相应事件
  17. 【转】电脑运行命令CMD集锦
  18. 面向切面编程--AOP(转)
  19. ArcGIS API for Silverlight 的重要内容******重要
  20. 《Python》 property、classmethod、staticmethod、isinstance、issubclass

热门文章

  1. POJ3683 Priest John&#39;s Busiest Day 【2-sat】
  2. JAVA 字节流和字符流度读写的区别
  3. 【07】node 之 Buffer
  4. 四个简单易用的demo,关于iOS定时器和延时的,非常好用。
  5. linux之awk手册
  6. [论文]A Link-Based Cluster Ensemble Approach for Categorical Data Clustering
  7. Python 复习-1
  8. 在 IntelliJ IDEA 中配置 JSF 开发环境的入门详解
  9. mysql error 1093 解决办法
  10. 洛谷 P1865 A % B Problem[筛素数/前缀和思想/区间质数个数]