剑指 Offer 12. 矩阵中的路径 - 7月23日
Posted boyscrytoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 12. 矩阵中的路径 - 7月23日相关的知识,希望对你有一定的参考价值。
题目
剑指 Offer 12. 矩阵中的路径
我的思路
深度优先搜索,递归实现。
注意剪枝时需要恢复没走过的路径。
我的实现
class Solution { public: bool search(int cor_x,int cor_y,int str_pos,vector<vector<char>>& board, string &word,vector<vector<int>> &map_records){ //出口条件 if (board[cor_x][cor_y]!=word[str_pos]||map_records[cor_x][cor_y]!=0){ return false; }else{//字符匹配 map_records[cor_x][cor_y]=1; if(str_pos==word.size()-1){//如果已经遍历完目标字符串 return true; } bool result = false; if(cor_x<board.size()-1) result=result||search(cor_x+1,cor_y,str_pos+1,board,word,map_records); if(cor_y<board[0].size()-1) result=result||search(cor_x,cor_y+1,str_pos+1,board,word,map_records); if(cor_x>0) result=result||search(cor_x-1,cor_y,str_pos+1,board,word,map_records); if(cor_y>0) result=result||search(cor_x,cor_y-1,str_pos+1,board,word,map_records); if(result==false){ map_records[cor_x][cor_y]=0;//关键一步,把走过但走不通的路径记录恢复为没走过 } return result; } } bool exist(vector<vector<char>>& board, string word) { vector<int> line(board[0].size(),0); vector<vector<int>> map_records(board.size(),line); for(int i =0;i<board.size();i++){ for(int j=0;j<board[0].size();j++){ //printf("check%d %d ",i,j); if(search(i,j,0,board,word,map_records)){ return true; } } } return false; } }; /* 直接用递归搜索? */
时间复杂度3k*m*m
空间复杂度m*n
拓展学习
以上是关于剑指 Offer 12. 矩阵中的路径 - 7月23日的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer(C++版本)系列:剑指 Offer 12 矩阵中的路径
剑指 Offer(C++版本)系列:剑指 Offer 12 矩阵中的路径