Monday, 21 December 2015

LeetCode Word Search simple BFS

LeetCode Word Search simple BFS

class Solution {

public:

    bool is_valid(int row,int col,int m,int n){

        if(row>=0 && row<m && col>=0 && col<n)

          return true;

        else

         return false;

    }

    bool bfs(vector<vector<char>>& board, string &word,int row,int col,bool visited[1000][1000],int row_arr[],int col_arr[],int m,int n,int idx){

        if(word[idx]=='\0')

          return true;

        int new_row,new_col;

        for(int i=0;i<4;i++)

        {

            new_row=row+row_arr[i];

            new_col=col+col_arr[i];

            if(is_valid(new_row,new_col,m,n) && !(visited[new_row][new_col]) && board[new_row][new_col]==word[idx])

            {

              visited[new_row][new_col]=true;

              if(bfs(board,word,new_row,new_col,visited,row_arr,col_arr,m,n,idx+1)==true)

                return true;

              else{

                visited[new_row][new_col]=false;

                continue;

              }

            }

        }

        return false;

    }

    bool exist(vector<vector<char>>& board, string word) {

        int m=board.size();

        if(m==0)

          return false;

        int n=board[0].size();

        int row_arr[]={-1,0,1,0};

        int col_arr[]={0,1,0,-1};

        bool visited[1000][1000];

        memset(visited,false,sizeof(visited));

        for(int i=0;i<m;i++){

            for(int j=0;j<n;j++){

               if(board[i][j]==word[0]){

                visited[i][j]=true;

                if(bfs(board,word,i,j,visited,row_arr,col_arr,m,n,1))

                 return true;

                else

                 memset(visited,false,sizeof(visited));

               }

            }

        }

        return false;

    }

};

No comments:

Post a Comment