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

    重要的是理解查找的逻辑,每到一个新节点就分别向上下左右四个方向进行查找,不满足的返回false,满足的在没有达成条件时继续进行查找

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
      vector<vector<char> > vv; //用来辨识当前元素是否是此躺已经查找过的元素
     
      bool dfs(vector<vector<char> > &v,string& str,int a,int b,int len){
    if(len==str.length()){  //判断是否已满足条件(全部找到),找到则返回
        return true;
    }
    if(a<0||a>=v.size()||b<0||b>=v[0].size()||vv[a][b]!=str[len]){
    return false;
    }
    char tmp= vv[a][b];
    vv[a][b]='-'; //标记当前字符
    if(dfs(v,str,a,b+1,len+1)|| //分别向四个方向查找
    dfs(v,str,a
    +1,b,len+1)||
    dfs(v,str,a,b
    -1,len+1)||
    dfs(v,str,a
    -1,b,len+1)){ //四个方向的查找只要有一条路查找成功则返回true(字符串存在)
    return true;
    }
    vv[a][b]=tmp; //查询无果则将其变回原状
    return false;
    }
    bool exist_string(vector<vector<char> > &v,string &s ){
        for(int i=0;i<v.size();i++){
            for(int j=0;j<v[0].size();j++){
                if(v[i][j]==s[0]){  //当找到与字符串第一个字符相同的字符时开始查找
                   vv=v ;                 //初始化对比数组
    if(dfs(v,s,i,j,0)) return true; } } } return false; }
    //测试例
    int main(){ string str="lkjfegq"; vector<vector<char> > v= {{'a','e','f','q'}, {'c','b','n','g'}, {'x','z','r','e'}, {'l','k','j','f'} }; if(exist_string(v,str)){ cout<<"true"<<endl; } else{ cout<<"false"<<endl; } return 0; }
  • 相关阅读:
    idea连接数据库和版本控制(Version Control)
    Idea新手入门-部署tomcat
    Redis 列表(List)
    Redis 集合(Set)
    Redis中的哈希(Hash)
    Redis初步整理
    C#中的集合之ArryList
    linux中pip安装步骤与使用详解
    搭建 LAMP 环境
    搭建WordPress 个人博客
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/13968240.html
Copyright © 2011-2022 走看看