LeetCode:Word Search


題目鏈接

Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

For example,
Given board =

[
  ["ABCE"],
  ["SFCS"],
  ["ADEE"]
]

word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.

分析:遍歷board找到和word首字母相同的位置,然后從該位置dfs看能否生成word。進行dfs時,對當前位置分別訪問上下左右四個位置,如果這些位置中的字母和word的下一個字母相同,則從這些位置繼續搜索。對於board中元素已訪問的標志可以設一個訪問標志數組,也可以把已訪問的元素設置成某個字符,比如本文的代碼就是設置成“#”,對該位置搜索完后要恢復原來的字母。                                                                     本文地址

class Solution {
public:
    bool exist(vector<vector<char> > &board, string word) {
        const int row = board.size();
        if(row == 0)return false;
        const int col = board[0].size();
        for(int i = 0; i < row; i++)
            for(int j = 0; j < col; j++)
                if(board[i][j] == word[0] && dfs(i, j, word, 0, board))
                    return true;
        return false;
    }
    
    bool dfs(int row, int col, string &word, int index, 
        vector<vector<char> > &board)
    {
        if(index == word.size() - 1)return true;
        char ctmp = board[row][col];
        board[row][col] = '#';//標志為已訪問
        //上
        if(row-1 >=0 && board[row-1][col] == word[index+1])
            if(dfs(row-1, col, word, index+1, board))
                return true;
        //下
        if(row+1 < board.size() && board[row+1][col] == word[index+1])
            if(dfs(row+1, col, word, index+1, board))
                return true;
        //左
        if(col-1 >=0 && board[row][col-1] == word[index+1])
            if(dfs(row, col-1, word, index+1, board))
                return true;
        //右
        if(col+1 < board[0].size() && board[row][col+1] == word[index+1])
            if(dfs(row, col+1, word, index+1, board))
                return true;
        board[row][col] = ctmp;//恢復原來的字母
        return false;
    }
};

 

【版權聲明】轉載請注明出處:http://www.cnblogs.com/TenosDoIt/p/3461519.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM