class Coordinates { // for storing coordinates as object. public int x, y; Coordinates(int x,int y) { this.x = x; this.y = y; } } public class BFS { // queue of coordinates. static Coordinates[] queue = new Coordinates[1000]; private static int front = -1; private static int rear = -1; static void enqueue(Coordinates coord) { if (front == -1 && rear == -1) { front = 0; rear = 0; } else { rear++; } queue[rear] = coord; } static void dequeue() { if (front == 0 && rear == 0) { front = -1; rear = -1; } else { front++; } } // traversing directions. private static final int[][] dir = new int[][]{ {+0, +1}, // right. {+1, +0}, // down. {+0, -1}, // left. {-1, +0}, // up. }; static void bfs(char[][] maze, Coordinates start, boolean[][] visited) { int curx; int cury; for (int i = 0; i < 4; i++) { curx = start.x; cury = start.y; curx += dir[i][0]; cury += dir[i][1]; if (curx < 0 || cury < 0 || curx > maze.length - 1 || cury > maze.length - 1) { // for square... out of maze check. continue; } else if (maze[curx][cury] == '$') { System.out.println("Path found"); System.exit(0); } else if (visited[curx][cury] || maze[curx][cury] == '#') { continue; } else if(maze[curx][cury]=='_') { enqueue(new Coordinates(curx, cury)); visited[curx][cury] = true; } } dequeue(); if (front == -1) { System.out.println("path not found"); System.exit(0); } else bfs(maze, queue[front], visited); } public static void main(String[] args) { char[][] maze = { {'*', '#', '#'}, {'_', '_', '#'}, {'_', '#', '$'}, }; Coordinates start = new Coordinates(0,0); boolean[][] visited = new boolean[maze.length][maze.length]; for (int i = 0; i < maze.length; i++) { for (int j = 0; j < maze.length; j++) { visited[i][j] = false; } } visited[0][0] = true; enqueue(start); bfs(maze, start, visited); } }