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

路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。

如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。

注意:

  • 输入的路径不为空;
  • 所有出现的字符均为大写英文字母;

数据范围

矩阵中元素的总个数 [0,900][0,900]。
路径字符串的总长度 [0,900][0,900]。

样例

matrix=
[
  ["A","B","C","E"],
  ["S","F","C","S"],
  ["A","D","E","E"]
]

str="BCCE" , return "true" 

str="ASAE" , return "false"

 
class Solution {
public:
  bool dfs(vector<vector<char> >&m,string &s,int c,int x,int y)
  {//已经确定就是这种,此时的是对的
      int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};
      if(c==s.size()-1)return true;
      //已经正确了以后再回传递,所以一定正确
      char q=m[x][y];
      m[x][y]='c';
      //因为和主函那种不一样,所以要利用返回值
      for(int i=0;i<4;i++)
      {
         int a=x+dx[i],b=y+dy[i];
         if(a>=0&&a<m.size()&&b>=0&&b<m[0].size()&&s[c+1]==m[a][b])
         if(dfs(m,s,c+1,a,b))return true;
         //最后一个是true,则一直会向前转递
      }
      m[x][y]=q;
      return false;
  }
    
    
    
    
    bool hasPath(vector<vector<char> >& matrix, string &str) 
    {
        
        for(int i=0;i<matrix.size();i++)
        {
            for(int j=0;j<matrix[i].size();j++)
            {
                if(str[0]==matrix[i][j])
                {
                     if(dfs(matrix,str,0,i,j))//1 代表着是第几个已经相同 ,i j代表着位置
                     return true;
                }
               
            }
        }
        return false;
            
    }
       
};

  

posted on 2022-08-10 23:03  浅唱\,,笑竹神易  阅读(28)  评论(0)    收藏  举报