码迷,mamicode.com
首页 > 其他好文 > 详细

剑指 Offer 12. 矩阵中的路径 - 7月23日

时间:2020-07-23 15:51:14      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:mamicode   实现   img   load   匹配   ESS   剪枝   result   data   

题目

剑指 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\n",i,j);
                if(search(i,j,0,board,word,map_records)){
                    return true;
                }
            }
        }
        return false;
    }
};
/*
直接用递归搜索?

*/

时间复杂度3k*m*m

空间复杂度m*n

拓展学习

剑指 Offer 12. 矩阵中的路径 - 7月23日

标签:mamicode   实现   img   load   匹配   ESS   剪枝   result   data   

原文地址:https://www.cnblogs.com/BoysCryToo/p/13365363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!