zoukankan      html  css  js  c++  java
  • 矩阵的路径

    1回溯法

    class Solution {
    public:
        bool hasPath(char* matrix, int rows, int cols, char* str)
        {
         if( matrix==NULL||str==NULL||rows<=0||cols<=0)
             return false;
         int row=0;
         int col=0;
         bool * visited=new bool[rows*cols];  //new 一个矩阵,返回一个指针;用以检测每个节点是否经过了的;
         memset(visited,0,rows*cols);
         int pathlength=0;//字符串所在的位置
         for(row=0;row<rows;row++)
           {
              for(col=0;col<cols;col++)
              {
                 if(hasPathCore(matrix,rows,cols,row,col,str,visited,pathlength))//如果路径搜索成功
                 {
                   return  true; 
                 }
              }
           }
           delete [] visited;
           return  false; 
        }
      public : 
          bool hasPathCore(char* matrix,int rows, int cols, int row, int col, char* str, bool * visited,int & pathlength)
         {
          bool haspath=false;
          //指针的话上面已经验证过非空指针了  
          if(str[pathlength]=='')//如果位置处是空字符  
          {
             return true; 
          }
          //有必要在每个函数里进行限制                                                 //没有被访问过
          if(row>=0&&row<rows&&col>=0&&col<cols&&matrix[col+row*cols]==str[pathlength]&&visited[col+row*cols]==false)
          {
             pathlength++; //先向前走
             visited[col+row*cols]=true;
            //围绕该点的上下左右找 看有无和path相对应的值
              haspath= (hasPathCore(matrix,rows,cols,row-1,col,str,visited,pathlength)||       
                       hasPathCore(matrix,rows,cols,row+1,col,str,visited,pathlength)||
                       hasPathCore(matrix,rows,cols,row,col-1,str,visited,pathlength)||
                       hasPathCore(matrix,rows,cols,row,col+1,str,visited,pathlength));
             if(!haspath)//如果该路径没找到的话  //那么我们回退
             {
              pathlength--;//回退一个
              visited[col+row*cols]=false; //当我没参观过此处
             }
    
          
          }
             return haspath;
      }
    
    
    };
  • 相关阅读:
    python入门(3)净化雷锋网网页内容
    Ecos3.0 Spi Driver for Leon3
    梦断代码1了解你的编译器和IDE
    诚聘高级测试工程师(北京职位)
    高级PHP开发工程师、高级前端开发工程师(北京职位)
    MySQL DBA (北京职位)
    赴百度 Web前端工程师 三个职位
    new与malloc的区别
    Google C++编程风格指南
    MFC的picture控件 静态加载与动态加载
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11373329.html
Copyright © 2011-2022 走看看