Search a word in a given 2 dimensional matrix of letters



Recursion : Program to search a word in a given 2 dimensional matrix of letters

#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>

using namespace std;

class WordSearch {

    public:

    bool Search (int r, int c, int height, int width, string& word, vector<string>& board, int sz) {

        // If the word size has reached the size of the word that we are looking for
        if (sz == word.size()) return true;

        // If the current search position goes beyond the board size or there is a character mismatch
        if (r < 0 || c < 0 || r == height || c == width || board[r][c] != word[sz]) return false;
        
        // Hash out the visited position as we don't want to visit it again
        char ch = board[r][c];
        board[r][c] = '#';
        
        int left = Search (r-1, c, height, width, word, board, sz+1);
        int right = Search (r+1, c, height, width, word, board, sz+1);
        int up = Search (r, c+1, height, width, word, board, sz+1);
        int down = Search (r, c-1, height, width, word, board, sz+1);
       
        // Revert the modified character.
        board[r][c] = ch;
        return left || right || up || down;

    }

    // Below function returns true if the word [word] exist on the board
    bool Exist (vector<string> board, string word) {

        int rows = board.size();
        int cols = board[0].size();
        for (int r=0; r<rows; r++) {
            for (int c=0; c<cols; c++) {
                // Start search only if the 1'st characters of the word matches
                if (board[r][c] == word[0]) {
                    if (Search (r, c, rows, cols, word, board, 0)) return true;
                }
            }
        }
        return false;
    }
};

int main() {

    WordSearch W;
    //====================================
    vector<string> vec_1 = {{"ABCE"},
                            {"SFCS"},
                            {"ADEE"}};

    if (W.Exist(vec_1, "ABCCED") == 1)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;

    //====================================
    vector<string> vec_2 = {{"AAAAA"},
                            {"AAAAA"},
                            {"AAAAA"},
                            {"AAAAA"}};

    if (W.Exist(vec_2, "AAB") == 1)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;

    //====================================
    vector<string> vec_3 = {{"FGABG"},
                            {"EFAEC"},
                            {"GGFBD"},
                            {"GGDCD"}};

    if (W.Exist(vec_3, "FEGGGDCDDCGBAG") == 1)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;

    //====================================
    vector<string> vec_4 = {{"FCDFFD"},
                            {"BGCBFC"}};

    if (W.Exist(vec_4, "FBGCDCBFFF") == 1)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;

    return 0;
}

Output

Yes
No
Yes
Yes


Copyright (c) 2019-2024, Algotree.org.
All rights reserved.