暴力dfs搜索就行了, 应该没什么好的算法
const int MAXN = 100 + 10;
const int dx[] = {-1, 0, 0, 1};
const int dy[] = {0, -1, 1, 0};
int n, m;
int is[MAXN][MAXN];
bool dfs(int r, int c, int p, vector<vector<char> > & board, string & word){
if(board[r][c] != word[p])
return false;
if(p >= word.size() - 1)
return true;
is[r][c] = 1;
for(int i = 0; i < 4; ++ i){
int nr = r + dx[i];
int nc = c + dy[i];
if(nr >= 0 && nr < n)
if(nc >= 0 && nc < m)
if(!is[nr][nc])
if(dfs(nr, nc, p + 1, board, word))
return true;
}
is[r][c] = 0;
return false;
}
class Solution {
public:
bool exist(vector<vector<char> > &board, string word) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(board.size() <= 0 || board[0].size() <= 0)
return false;
if(word.size() <= 0)
return false;
memset(is, 0x00, sizeof(is));
n = board.size();
m = board[0].size();
for(int i = 0; i < n; ++ i)
for(int j = 0; j < m; ++ j)
if(dfs(i, j, 0, board, word))
return true;
return false;
}
};