Skip to main content

Print Maze Paths With Jumps

1. You are given a number n and a number m representing number of rows and columns in a maze.

2. You are standing in the top-left corner and have to reach the bottom-right corner. 

3. In a single move you are allowed to jump 1 or more steps horizontally (as h1, h2, .. ), or 1 or more steps vertically (as v1, v2, ..) or 1 or more steps diagonally (as d1, d2, ..). 

4. Complete the body of printMazePath function - without changing signature - to print the list of all paths that can be used to move from top-left to bottom-right.

Use sample input and output to take idea about output.


Input Format

A number n

A number m

Output Format

Print paths (one path in each line) in order hinted by Sample output


Constraints

0 <= n <= 5

0 <= m <= 5

Sample Input

3

3

Sample Output

h1h1v1v1

h1h1v2

h1v1h1v1

h1v1v1h1

h1v1d1

h1v2h1

h1d1v1

h2v1v1

h2v2

v1h1h1v1

v1h1v1h1

v1h1d1

v1h2v1

v1v1h1h1

v1v1h2

v1d1h1

v2h1h1

v2h2

d1h1v1

d1v1h1

d1d1

d2


Solution:

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt();
        printMazePaths(1,1,n,m,"");
    }

    // sr - source row
    // sc - source column
    // dr - destination row
    // dc - destination column
    public static void printMazePaths(int sr, int sc, int dr, int dc, String psf) {
        
        if(sr>dr || sc>dc)  return;
        if(sr==dr && sc==dc){
            System.out.println(psf);
            return;
        }
        
        for(int j=1;j<=dc-sc;j++)
            printMazePaths(sr,sc+j,dr,dc,psf+"h"+j);
        
        for(int i=1;i<=dr-sr;i++)
            printMazePaths(sr+i,sc,dr,dc,psf+"v"+i);
        
        for(int d=1;d<=(dr-sr) && d<=(dc-sc);d++){
            printMazePaths(sr+d,sc+d,dr,dc,psf+"d"+d);
        }
        
    }

}

Comments

Popular posts from this blog

Classes and Objects | Accenture TFA

  Question  1 Correct Mark 1.00 out of 1.00 Flag question Question text ___ and _____ are the access specifiers that can be applied to top level Class. Select one or more: public   protected default   private Feedback Your answer is correct. The correct answers are: default, public Question  2 Correct Mark 1.00 out of 1.00 Flag question Question text class Sample{      private double num = 100;    private int square(int a){ return a*a;    } }   public class Test{    public static void main(String args[]){   Sample obj = new Sample();   System.out.println(obj.num);  System.out.println(obj.square(10));    }   } Select one: Compile time error   Run time error Executes but no output 100 Feedback Your answer is correct. The correct answer is: Compile time error Question  3 Correct Mark 1.00 out of 1.00 Flag question Question text Choose the appropriate access specifier for the attribute value so that it can be accessed from anywhere. class Test { Choose... private protected public d

Classes and Objects, Packages | Accenture TFA

  Question  1 Correct Mark 1.00 out of 1.00 Flag question Question text State True or False When using eclipse whichever classes are needed for the present class can be imported automatically. Select one: True   False Feedback The correct answer is 'True'. Question  2 Correct Mark 1.00 out of 1.00 Flag question Question text switch(a) {     default:         System.out.println("Welcome"); } Of which data types can the variable ‘a’ be? 1. long 2. byte 3. int 4. char 5. float 6. short Select one: 3, 4 and 5 1 and 3 3 and 4 2,3, 4 and 6   Feedback Your answer is correct. The variable used in a switch statement can be a byte, short, int, char or String type only. The correct answer is:  2,3, 4 and 6 Question  3 Correct Mark 1.00 out of 1.00 Flag question Question text Predict the output.   public class Test {         public static void main(String args[])         {                     int a = 2, b = 0;              for ( ; b < 20; ++b) {                  if (b % a == 0)

Balanced Brackets

1. You are given a string exp representing an expression. 2. You are required to check if the expression is balanced i.e. closing brackets and opening brackets match up well. e.g. [(a + b) + {(c + d) * (e / f)}] -> true [(a + b) + {(c + d) * (e / f)]} -> false [(a + b) + {(c + d) * (e / f)} -> false ([(a + b) + {(c + d) * (e / f)}] -> false Input Format A string str Output Format true or false Constraints 0 <= str.length <= 100 Sample Input [(a + b) + {(c + d) * (e / f)}] Sample Output true Solution import java.io.*; import java.util.*; public class Main {     public static void main(String[] args) throws Exception {         Scanner sc = new Scanner(System.in);         String str = sc.nextLine();         int n = str.length();         Stack<Character> s = new Stack<>();         for(int i=0;i<n;i++){             char ch = str.charAt(i);             if(ch == '[')                 s.push(']');             else if(ch == '{'