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

    拓展学习

  • 相关阅读:
    wf(三)
    WF(二)
    WF4.0入门(一)
    枚举
    函数和立即函数
    对象字面量
    Break和continue语句
    对象
    循环语句
    条件分支语句(SWICH语句)
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13365363.html
Copyright © 2011-2022 走看看