题目描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。
示例1
输入
复制
[[a,b,c,e],[s,f,c,s],[a,d,e,e]],“abcced”
返回值
复制
true
示例2
输入
复制
[[a,b,c,e],[s,f,c,s],[a,d,e,e]],“abcb”
返回值
复制
false
在所有路径中找到一条满足条件的,也用搜索
class Solution {
public:
string ans;
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
bool fin(int x,int y,vector<vector<bool> >&flag,vector<vector<char> >&matrix,int id)
{
if(id==ans.length()-1) return true;
for(int i=0;i<4;i++)
{
int tx=x+dir[i][0],ty=y+dir[i][1];
if(tx>=0&&tx<matrix.size()&&ty>=0&&ty<matrix[0].size()&&
flag[tx][ty]==false&&matrix[tx][ty]==ans[id+1])
{
flag[tx][ty]=true;
if(fin(tx,ty,flag,matrix,id+1))
return true;
flag[tx][ty]=false;
}
}
return false;
}
bool hasPath(vector<vector<char> >& matrix, string word) {
if(matrix.size()==0) return false;
ans=word;
vector<vector<bool>>flag(matrix.size(),vector<bool>(matrix[0].size(),false));
for(int i=0;i<matrix.size();i++)
for(int j=0;j<matrix[0].size();j++)
if(matrix[i][j]==word[0])
{
flag[i][j]=true;
if(fin(i,j,flag,matrix,0))
return true;
flag[i][j]=false;
}
return false;
}
};