• 剑指offer64-矩阵中的路径


    请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。

    路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。

    例如四行四列矩阵【abcesfcsadee】矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。

        bool hasPath(char* matrix, int rows, int cols, char* str)
        {
            //find str[0]
            vector<vector<bool > >mat(rows);
            for(int i=0;i<rows;i++)
            {
                mat[i].resize(cols);
                
            }
            bool res=false;
            for(int i=0;i<rows;i++)
            {
                for(int j=0;j<cols;j++)
                {
                    if(*(matrix+i*cols+j)==str[0])
                    {
                        
                        res=res||hasString(matrix,mat,str,rows,cols,i,j,0);
                        for(int i=0;i<rows;i++)
                        {
                            for(int j=0;j<cols;j++)
                                {
                                mat[i][j]=0;
                   
                            }
                        }
                    }
                }
            }
            return res;
            //traverse matrix
        }
        bool hasString(char* matrix,vector<vector<bool>>& mat,char* str,int rows,int cols,int r,int c,int i)
        {
            
            if(r<0||c<0||r>=rows||c>=cols||mat[r][c]||*(matrix+r*cols+c)!=str[i]) return false;
            if(*(matrix+r*cols+c)==str[i]&&str[i+1]=='')
                return true;
               //four direction
            mat[r][c]=true;
            bool res;
            res=hasString(matrix,mat,str,rows,cols,r-1,c,i+1);
            if(res==false)
            {
                res=hasString(matrix,mat,str,rows,cols,r+1,c,i+1);
            }
            if(res==false)
            res=hasString(matrix,mat,str,rows,cols,r,c+1,i+1);
            if(res==false)
            res=hasString(matrix,mat,str,rows,cols,r,c-1,i+1);
            return res;
            
        }

  • 相关阅读:
    样式
    样式表的类别、选择器和优先级
    随记
    框架
    表单元素
    HTLM内容容器标签和常用标签
    HTML5的意义、改变以及全局属性
    11月21日html基础
    感想 目标和展望
    C++结构体实例和类实例的初始化
  • 原文地址:https://www.cnblogs.com/trouble-easy/p/12988780.html
Copyright © 2020-2023  润新知