Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Whomever can successfully write this program I will always come to them for all

ID: 3691913 • Letter: W

Question

Whomever can successfully write this program I will always come to them for all my tutoring needs. Thank you!

Requirements of ***Java eclipse*** program

- The program should give the user a 4 choice menu to choose as shown at the top of screenshot below.
- The menu should work allowing the user to choose to read a maze file (you can create the file with an online maze generator following specifications Iisted here) , show the current maze map, start the game, and exit
- The user should be able to input commands to figure out the maze path (examples: u 3 - moves upward 3 rows, r 2 - moves to the right 2 columns)
- The map should consist of 8 rows and 8 columns
- The map of the maze (# : wall, ‘ ‘ : the road, S: a starting point, E: an ending point)
- If one game ends the program repeats until a user chooses ‘Exit’
- Please don't forget to paste the maze file you create at the bottom of the program code so I can test it

This is ***EXACTLY*** how the program should look and run below

Explanation / Answer

Answer:

import java.io.*;

public class DetectedShortestPathInMaze
{
  
   static int number_of_rows=10;       static    int number_of_columns=10;
   static int begin_of_row=5;       static int begin_of_coloumn=3;
    static int end_of_row=1;       static int end_of_coloumn=6;
  
   static    int taken_maze[][]={{1,1,1,1,1,1,1,1,1,1},
                           {1,0,0,1,0,0,0,1,0,1},
                           {1,0,1,1,1,0,1,1,0,1},
                           {1,0,0,0,0,0,0,0,0,1},
                           {1,0,1,0,1,1,0,1,1,1},
                           {1,0,0,0,0,1,0,0,0,1},
                           {1,0,1,1,1,0,0,1,1,1},
                           {1,0,1,1,1,1,0,1,0,1},
                           {1,0,0,0,0,0,0,0,0,1},
                           {1,1,1,1,1,1,1,1,1,1}};

  
   static    int shortestpath[]=new int[number_of_rows*number_of_columns];
   static    int length_short;

  
  
boolean visitedalready(int row, int col, int detectedpathsofar[], int detectedlengthsofar){
      
      
       int x;
       int goal = row*number_of_columns+col;

       for (x=0;x<detectedlengthsofar;x++)
           if (detectedpathsofar[x]==goal) return true;

       return false;
   }

  
  
   public void displayupdatedpath(int takenpath[], int takenlength){
      

       int r,c;

       for (r=0;r<number_of_rows;r++){
           for(c=0;c<number_of_columns;c++){
               if (taken_maze[r][c]==1)
                   System.out.print("|");               
               else if (r==begin_of_row && c==begin_of_coloumn)
                   System.out.print("S");               
               else if (r==end_of_row && c==end_of_coloumn)
                   System.out.print("X");               
               else if (visitedalready(r,c,takenpath,takenlength))
                   System.out.print("o");               
               else
                   System.out.print(" ");               
           }
           System.out.println("");
       }
   }
  
   public void searchnewpath(int row, int col, int detectedpathsofar[], int detectedlengthsofar){
      

      
       if (row<0 || col<0 || row>=number_of_rows || col>=number_of_columns)
           return;
       if (taken_maze[row][col]==1) return ;
       if (visitedalready(row, col, detectedpathsofar, detectedlengthsofar)) return;

       int takenpath[]=new int[detectedlengthsofar+1];

       System.arraycopy(detectedpathsofar, 0, takenpath, 0, detectedlengthsofar);
          
                          
      
       takenpath[detectedlengthsofar++]=row*number_of_columns+col;

       if (row==end_of_row && col==end_of_coloumn){      
          

           System.out.println("Detected path of length "+detectedlengthsofar+":");
           displayupdatedpath(takenpath, detectedlengthsofar);

           if (detectedlengthsofar<=length_short){
               length_short=detectedlengthsofar;
               System.arraycopy(takenpath, 0, shortestpath, 0, detectedlengthsofar);
               System.out.println(" The new shortest path is of length " + detectedlengthsofar);
           }
           System.out.println("");
           return;
       }

      
       searchnewpath(row-1, col, takenpath, detectedlengthsofar);
       searchnewpath(row, col-1, takenpath, detectedlengthsofar);
       searchnewpath(row, col+1, takenpath, detectedlengthsofar);
       searchnewpath(row+1, col, takenpath, detectedlengthsofar);
   }
          
  
   public static void main(String[] args)
   {
      

       int r,c,x;              
       int detectedpathsofar[];      
       int detectedlengthsofar;      

       DetectedShortestPathInMaze obj=new DetectedShortestPathInMaze();  

       detectedpathsofar=new int[obj.number_of_rows*obj.number_of_columns];
      
       for (x=0;x<obj.number_of_rows*obj.number_of_columns;x++){
           obj.shortestpath[x]=-1;
           detectedpathsofar[x]=-1;
       }

      
       obj.length_short=obj.number_of_rows*obj.number_of_columns+1;
       detectedlengthsofar=0;

       System.out.println("The Maze Is Shown As Below:");
       for (r=0;r<obj.number_of_rows;r++){
           for (c=0;c<obj.number_of_columns;c++){
               if (r==begin_of_row && c==begin_of_coloumn)      
                   System.out.print("S");      
               else if (r==end_of_row && c==end_of_coloumn)
                   System.out.print("x");
               else if (obj.taken_maze[r][c]==0)
                   System.out.print(" ");
               else System.out.print("|");
           }
           System.out.println("");
       }

       System.out.println("");
       System.out.println("Searching For Paths!!!!!");

       obj.searchnewpath(begin_of_row, begin_of_coloumn, detectedpathsofar, detectedlengthsofar);

       System.out.println("");
       System.out.println("The shortest path was found with the following of length "+ obj.length_short);
       obj.displayupdatedpath(obj.shortestpath, obj.length_short);

   }
}