zoukankan      html  css  js  c++  java
  • 剑指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;
            
        }

  • 相关阅读:
    有关Maven
    白盒测试(White-box Testing)
    Peer Review(同行评审)
    闰年测试(非法输入的判断)
    等价类划分的应用2
    等价类划分(Equivalence Class Partitioning)
    软件测试随堂笔记-1
    软件测试之注意事项
    软件测试的发展方向
    软件测试之白盒测试
  • 原文地址:https://www.cnblogs.com/trouble-easy/p/12988780.html
Copyright © 2011-2022 走看看