题目描述

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
 
class Solution {
public:
bool f = ;
void dfs(char* matrix, int rows, int cols, char* str, bool* vis, int n, int an)
{
if(n == strlen(str))
{
f = ;
return;
}
if((an->=)&&(an-<cols*rows)&&vis[an-]==&&str[n]==matrix[an-])
{
vis[an-] = ;
dfs(matrix, rows, cols, str, vis, n+, an-);
if(f == ) return;
vis[an-] = ;
}
if((an+>=)&&(an+<cols*rows)&&vis[an+]==&&str[n]==matrix[an+])
{
vis[an+] = ;
dfs(matrix, rows, cols, str, vis, n+, an+);
if(f == ) return;
vis[an+] = ;
}
if((an-cols>=)&&(an-cols<cols*rows)&&vis[an-cols]==&&str[n]==matrix[an-cols])
{
vis[an-cols] = ;
dfs(matrix, rows, cols, str, vis, n+, an-cols);
if(f == ) return;
vis[an-cols] = ;
}
if((an+cols>=)&&(an+cols<cols*rows)&&vis[an+cols]==&&str[n]==matrix[an+cols])
{
vis[an+cols] = ;
dfs(matrix, rows, cols, str, vis, n+, an+cols);
if(f == ) return;
vis[an+cols] = ;
}
return;
}
bool hasPath(char* matrix, int rows, int cols, char* str)
{
bool vis[rows*cols+];
for(int i=; i<rows; i++)
for(int j=; j<cols; j++)
{
int an = i*cols+j;
if(matrix[an] == str[])
{
memset(vis, , sizeof(vis));
vis[an] = ;
dfs(matrix, rows, cols, str, vis, , an);
if(f == ) return ;
}
}
return ;
}
};
05-08 07:58