zoukankan      html  css  js  c++  java
  • [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.
    Hide Tags
     Array Backtracking
     
     
        这事一道回溯题,写的有点重复,因为没有将多个if 合在一起。
     
     
     
    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    class Solution {
    public:
        bool exist(vector<vector<char> > &board, string word) {
            if(word.length()<1) return true;
            if(board.size()==0||board[0].size()==0) return false;
            for(int i =0;i<board.size();i++){
                for(int j =0;j<board[0].size();j++){
                    if(board[i][j]==word[0]&&helpFun(board,word,1,i,j))
                        return true;
                }
            }
            return false;
        }
    
        bool helpFun(vector<vector<char> >&board,string & word,int idx,int beg_i,int beg_j)
        {
            if(idx == word.size())  return true;
            char tmp = board[beg_i][beg_j];
            board[beg_i][beg_j] = '*';
            if(beg_i>0&&board[beg_i-1][beg_j]==word[idx]&&helpFun(board,word,idx+1,beg_i-1,beg_j)){
                board[beg_i][beg_j] = tmp;
                return true;
            }
            if(beg_i<board.size()-1&&board[beg_i+1][beg_j]==word[idx]&&helpFun(board,word,idx+1,beg_i+1,beg_j)){
                board[beg_i][beg_j] = tmp;
                return true;
            }
            if(beg_j>0&&board[beg_i][beg_j-1]==word[idx]&&helpFun(board,word,idx+1,beg_i,beg_j-1)){
                board[beg_i][beg_j] = tmp;
                return true;
            }
            if(beg_j<board[0].size()-1&&board[beg_i][beg_j+1]==word[idx]&&helpFun(board,word,idx+1,beg_i,beg_j+1)){
                board[beg_i][beg_j] = tmp;
                return true;
            }
            board[beg_i][beg_j] = tmp;
            return false;
        }
    };
    
    int main()
    {
        vector<vector< char> > board{{'A','B','C','E'},{'S','F','C','S'},{'A','D','E','E'}};
        Solution sol;
        cout<<sol.exist(board,"ABCB")<<endl;
        return 0;
    }
  • 相关阅读:
    MYSQL
    Oracle建立表空间和用户
    oracle创建表空间
    MySQL数据库远程连接开启方法
    linux mkfs命令参数及用法详解---linux格式化文件系统命令(包括swap分区)
    小峰Hibernate简介与HelloWorld
    数据结构与算法JavaScript描述——链表
    数据结构与算法JavaScript描述——使用队列
    数据结构与算法JavaScript描述——队列
    数据结构与算法JavaScript描述——栈的使用
  • 原文地址:https://www.cnblogs.com/Azhu/p/4356543.html
Copyright © 2011-2022 走看看