Software Development

Examine if path exists from top-left to bottom-right nook of Grid

Examine if path exists from top-left to bottom-right nook of Grid
Written by admin


  

#embrace <bits/stdc++.h>

utilizing namespace std;

  

bool is_valid(int x, int y, vector<vector<int> >& grid)

{

    if (x < 0 || y < 0 || x >= grid.measurement()

        || y >= grid[0].measurement()) {

        return 0;

    }

    return 1;

}

  

void dfs(int x, int y, vector<vector<bool> >& visited,

         vector<vector<int> >& grid)

{

    if (visited[x][y])

        return;

    visited[x][y] = 1;

    int up = 0, down = 0, left = 0, proper = 0;

    if (grid[x][y] == 1) {

        left = 1;

        proper = 1;

    }

    else if (grid[x][y] == 2) {

        up = 1;

        down = 1;

    }

    else if (grid[x][y] == 3) {

        left = 1;

        down = 1;

    }

    else if (grid[x][y] == 4) {

        down = 1;

        proper = 1;

    }

    else if (grid[x][y] == 5) {

        up = 1;

        left = 1;

    }

    else {

        proper = 1;

        up = 1;

    }

  

    if (up) {

        int new_x = x - 1, new_y = y;

        if (is_valid(new_x, new_y, grid)

            && (grid[new_x][new_y] == 2

                || grid[new_x][new_y] == 3

                || grid[new_x][new_y] == 4)) {

            dfs(new_x, new_y, visited, grid);

        }

    }

    if (down) {

        int new_x = x + 1, new_y = y;

        if (is_valid(new_x, new_y, grid)

            && (grid[new_x][new_y] == 2

                || grid[new_x][new_y] == 5

                || grid[new_x][new_y] == 6)) {

            dfs(new_x, new_y, visited, grid);

        }

    }

    if (left) {

        int new_x = x, new_y = y - 1;

        if (is_valid(new_x, new_y, grid)

            && (grid[new_x][new_y] == 1

                || grid[new_x][new_y] == 4

                || grid[new_x][new_y] == 6)) {

            dfs(new_x, new_y, visited, grid);

        }

    }

    if (proper) {

        int new_x = x, new_y = y + 1;

        if (is_valid(new_x, new_y, grid)

            && (grid[new_x][new_y] == 1

                || grid[new_x][new_y] == 3

                || grid[new_x][new_y] == 5)) {

            dfs(new_x, new_y, visited, grid);

        }

    }

}

  

int principal()

{

    vector<vector<int> > grid

        = { { 2, 4, 3 }, { 6, 5, 2 } };

    int N = grid.measurement(), M = grid[0].measurement();

    vector<vector<bool> > visited(N, vector<bool>(M, 0));

  

    

    dfs(0, 0, visited, grid);

    if (visited[N - 1][M - 1])

        cout << "Possiblen";

    else

        cout << "Impossiblen";

  

    return 0;

}

About the author

admin

Leave a Comment