您的位置:首页 > 其它

leetcode Word Search 待解决?

2015-05-14 19:38 246 查看
终于搞定了这个DFS,最近这个DFS写的很不顺手,我一直以为递归这种东西只是在解重构时比较麻烦,现在看来,连最简单的返回true和false的逻辑关系都不能说one hundred present 搞定。

人品啊TLE:

#include<iostream>
#include<vector>

using namespace std;

bool isLegal(int i, int j, vector<vector<char>> board)
{
int H = board.size();
int L = board[0].size();
if (i >= 0 && i < H&&j >= 0 && j < L)
return true;
return false;
}

bool searchWord(vector<vector<char>> board, vector<vector<bool>> visited, string word, int i, int j, int index)
{
if (index >= word.length())
{
return true;
}
/*if (word[index] == board[i][j])
{*/
visited[i][j] = true;
int dx[4] = { 1, 0, -1, 0 };
int dy[4] = { 0, 1, 0, -1 };

for (int x = 0; x < 4; ++x)
{
int ii = i + dx[x];
int jj = j + dy[x];
if (isLegal(ii, jj, board) && !visited[ii][jj] && board[ii][jj] == word[index] && searchWord(board, visited, word, ii, jj, index + 1))
return true;
}

/*if (isLegal(i - 1, j, board) && !visited[i - 1][j] && board[i - 1][j]==word[index] && searchWord(board, visited, word, i - 1, j, index + 1))
return true;
if (isLegal(i, j - 1, board) && !visited[i][j - 1] && board[i][j - 1] == word[index] && searchWord(board, visited, word, i, j - 1, index + 1))
return true;
if (isLegal(i + 1, j, board) && !visited[i + 1][j] && board[i + 1][j] == word[index] && searchWord(board, visited, word, i + 1, j, index + 1))
return true;
if (isLegal(i, j + 1, board) && !visited[i][j + 1] && board[i][j + 1] == word[index] && searchWord(board, visited, word, i, j + 1, index + 1))
return true;*/
/*}*/
visited[i][j] = false;
return false;
}

bool exist(vector<vector<char>>& board, string word) {
if (word.empty()) return false;
int H = board.size();
int L = board[0].size();
int i, j;
vector<vector<bool>> visited(H, vector<bool>(L, false));
for (i = 0; i < H; i++)
{
for (j = 0; j < L; j++)
{
if (word[0]==board[i][j]&&searchWord(board, visited, word, i, j, 1))
{
return true;
}
}
}
return false;
}

int main()
{
char boardArray[][4] =
{
{ 'A', 'B', 'C', 'E' },
{ 'S', 'F', 'C', 'S' },
{ 'A', 'D', 'E', 'E' }
};
vector<vector<char>> board1(3);
for (int i = 0; i < 3; i++)
{
vector<char> temp(4);
temp[0] = 'A';
board1[i] = temp;
for (int j = 0; j < 4; j++)
{
board1[i][j] = boardArray[i][j];
}
}

if (exist(board1, "ABCCED"))
cout << 1<<endl;
else
cout << 0 << endl;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: