zoukankan      html  css  js  c++  java
  • 剑指 Offer 12. 矩阵中的路径

    题目

    剑指 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

    拓展学习

  • 相关阅读:
    bless for you...
    Unity3D 热更新方案(集合各位专家的汇总)
    Unity与iOS原生代码之间的相互调用
    unity android相互调用
    unity3d资源打包总结
    Unity3D热更新LuaFramework入门实战
    unity插件开发
    Unity3D性能优化总结
    正确释放Vector的内存
    CCLuaObjcBridge
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13365363.html
Copyright © 2011-2022 走看看