[itint5]单词游戏
此题在数据大些,而且全是A的情况下会超时(因为要匹配到很后面才false)。通过利用数组本身作为visited标示,而且使用string引用,得意通过。
bool find(vector<vector<char> > &grid, string &pattern, int i, int j, int k) {
if (k == pattern.length()) return true;
int m = grid.size();
int n = grid[0].size();
if (i < 0 || i >= m || j < 0 || j >= n) return false;
if (pattern[k] == grid[i][j] && grid[i][j] != '#') {
char c = grid[i][j];
grid[i][j] = '#';
if (find(grid, pattern, i-1, j, k+1) ||
find(grid, pattern, i+1, j, k+1) ||
find(grid, pattern, i, j-1, k+1) ||
find(grid, pattern, i, j+1, k+1)) {
grid[i][j] = c;
return true;
} else {
grid[i][j] = c;
return false;
}
} else {
return false;
}
}
bool exists(vector<vector<char> > &grid, string pattern) {
int m = grid.size();
if (m == 0) return false;
int n = grid[0].size();
if (n == 0) return false;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (find(grid, pattern, i, j, 0)) return true;
}
}
return false;
}

浙公网安备 33010602011771号