Shortest path in a Binary Maze Java
- Get link
- X
- Other Apps
PROGRAM TO FIND SHORTEST PATH IN A BINARY MAZE
import java.util.*;class GFG{static int ROW = 9;static int COL = 10;// To store matrix cell coordinatesstatic class Point{ int x; int y; public Point(int x, int y) { this.x = x; this.y = y; }};// A Data Structure for queue used in BFSstatic class queueNode{ Point pt; // The coordinates of a cell int dist; // cell's distance of from the source public queueNode(Point pt, int dist) { this.pt = pt; this.dist = dist; }};// check whether given cell (row, col)// is a valid cell or not.static boolean isValid(int row, int col){ // return true if row number and // column number is in range return (row >= 0) && (row < ROW) && (col >= 0) && (col < COL);}// These arrays are used to get row and column// numbers of 4 neighbours of a given cellstatic int rowNum[] = {-1, 0, 0, 1};static int colNum[] = {0, -1, 1, 0};// function to find the shortest path between// a given source cell to a destination cell.static int BFS(int mat[][], Point src, Point dest){ // check source and destination cell // of the matrix have value 1 if (mat[src.x][src.y] != 1 || mat[dest.x][dest.y] != 1) return -1; boolean [][]visited = new boolean[ROW][COL]; // Mark the source cell as visited visited[src.x][src.y] = true; // Create a queue for BFS Queue<queueNode> q = new LinkedList<>(); // Distance of source cell is 0 queueNode s = new queueNode(src, 0); q.add(s); // Enqueue source cell // Do a BFS starting from source cell while (!q.isEmpty()) { queueNode curr = q.peek(); Point pt = curr.pt; // If we have reached the destination cell, // we are done if (pt.x == dest.x && pt.y == dest.y) return curr.dist; // Otherwise dequeue the front cell // in the queue and enqueue // its adjacent cells q.remove(); for (int i = 0; i < 4; i++) { int row = pt.x + rowNum[i]; int col = pt.y + colNum[i]; // if adjacent cell is valid, has path // and not visited yet, enqueue it. if (isValid(row, col) && mat[row][col] == 1 && !visited[row][col]) { // mark cell as visited and enqueue it visited[row][col] = true; queueNode Adjcell = new queueNode (new Point(row, col), curr.dist + 1 ); q.add(Adjcell); } } } // Return -1 if destination cannot be reached return -1;}// Driver Codepublic static void main(String[] args){ int mat[][] = {{ 1, 0, 1, 1, 1, 1, 0, 1, 1, 1 }, { 1, 0, 1, 0, 1, 1, 1, 0, 1, 1 }, { 1, 1, 1, 0, 1, 1, 0, 1, 0, 1 }, { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 }, { 1, 1, 1, 0, 1, 1, 1, 0, 1, 0 }, { 1, 0, 1, 1, 1, 1, 0, 1, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 1, 1, 1, 1, 0, 1, 1, 1 }, { 1, 1, 0, 0, 0, 0, 1, 0, 0, 1 }}; Point source = new Point(0, 0); Point dest = new Point(3, 4); int dist = BFS(mat, source, dest); if (dist != -1) System.out.println("Shortest Path is " + dist); else System.out.println("Shortest Path doesn't exist"); }}OUTPUT:
Shortest Path is 11
- Get link
- X
- Other Apps
Comments
Post a Comment