Word Search
2015-09-05 11:30
387 查看
这道题我们有用到什么高深的算法,就一个深度搜索搞定,只是其中的判断条件比较多,需要仔细思考到每种情况,还要注意一个字母只能使用一次。
-变量,函数声明解释
tag数组:用来标示该字母是否已经使用过
flag:全局变量,如果标示是否已经找到匹配,如果为真立刻返回
dfsSearch函数:深搜函数
直接上代码
bool flag; class Solution { public: bool exist(vector<vector<char> >& board, string word) { flag = 0; if(board.size()*board[0].size() < word.length()) return false; bool tag[100][100]; int i,j; for(i=0;i<100;i++){ for(j=0;j<100;j++) tag[i][j] = 0; } bool retval = 0; for(i=0;i<board.size();i++){ for(j=0;j<board[0].size();j++){ if(board[i][j] == word[0]){ tag[i][j] = 1; retval = dfsSearch(board,word,i,j,1,tag); tag[i][j] = 0; } if(retval) return retval; } } return retval; } bool dfsSearch(vector<vector<char> > &board,string word,int x,int y,int pos,bool a[100][100]){ if(flag) return true; if(pos == word.length()){ flag = 1; return true; } if(!flag && x-1 >=0 && a[x-1][y]!=1 && board[x-1][y] == word[pos]){ a[x-1][y] = 1; dfsSearch(board,word,x-1,y,pos+1,a); a[x-1][y] = 0; } if(!flag && y+1 < board[0].size() && a[x][y+1]!=1 && board[x][y+1] == word[pos]){ a[x][y+1] = 1; dfsSearch(board,word,x,y+1,pos+1,a); a[x][y+1] = 0; } if(!flag && x+1 < board.size() && a[x+1][y]!=1 && board[x+1][y] == word[pos]){ a[x+1][y] = 1; dfsSearch(board,word,x+1,y,pos+1,a); a[x+1][y] = 0; } if(!flag && y-1 >= 0 && a[x][y-1]!=1 && board[x][y-1] == word[pos]){ a[x][y-1] = 1; dfsSearch(board,word,x,y-1,pos+1,a); a[x][y-1] = 0; } return flag; } };
运行时间
相关文章推荐
- 动易2006序列号破解算法公布
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#动态调整数组大小的方法
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- 超大数据量存储常用数据库分表分库算法总结
- PowerShell数组的一些操作技巧
- C#数据结构与算法揭秘二
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#冒泡法排序算法实例分析
- C#实现将数组内元素打乱顺序的方法
- 算法练习之从String.indexOf的模拟实现开始