1、问题
2、算法标签
1、DFS
2、回溯
3、通过代码
class Solution {
public:
bool isused[500][500];
bool ans=false;
int rows;
int colums;
void dfs(string path,string target,int x,int y,vector<vector<char>>& matrix,string str){
//cout<<path<<" "<<x<<" "<<y<<endl;
if(ans){
return;
}
if(path==target){
ans=true;
return;
}
int step=path.length();
if(!ans&&x-1>=0&&isused[x-1][y]==false&&matrix[x-1][y]==str[step]){
string temp=path+str[step];
if(temp==target){
ans=true;
return;
}
isused[x-1][y]=true;
dfs(temp,target,x-1,y,matrix,str);
isused[x-1][y]=false;
}
if(!ans&&y-1>=0&&isused[x][y-1]==false&&matrix[x][y-1]==str[step]){
string temp=path+str[step];
if(temp==target){
ans=true;
return;
}
isused[x][y-1]=true;
dfs(temp,target,x,y-1,matrix,str);
isused[x][y-1]=false;
}
if(!ans&&x+1<rows&&isused[x+1][y]==false&&matrix[x+1][y]==str[step]){
string temp=path+str[step];
if(temp==target){
ans=true;
return;
}
isused[x+1][y]=true;
dfs(temp,target,x+1,y,matrix,str);
isused[x+1][y]=false;
}
if(!ans&&y+1<colums&&isused[x][y+1]==false&&matrix[x][y+1]==str[step]){
string temp=path+str[step];
if(temp==target){
ans=true;
return;
}
isused[x][y+1]=true;
dfs(temp,target,x,y+1,matrix,str);
isused[x][y+1]=false;
}
}
bool hasPath(vector<vector<char>>& matrix, string &str) {
//cout<<matrix.size()<<endl;
if(matrix.size()==0){
return false;
}
memset(isused,false,sizeof(isused));
rows=matrix.size();
colums=matrix[0].size();
for(int i=0;i<rows;i++){
for(int j=0;j<colums;j++){
if(matrix[i][j]==str[0]){
string start="";
start=start+str[0];
isused[i][j]=true;
dfs(start,str,i,j,matrix,str);
isused[i][j]=false;
}
}
}
return ans;
}
};