Question :
The problem is to print all the possible paths from top left to bottom right of a mXn matrix with the constraints that from each cell you can either move only to right or down.(GeeksForGeeks)
Idea :
The algorithm is a simple recursive algorithm, from each cell first
print all paths by going down and then print all paths by going right.
Do this recursively for each cell encountered.
Solution :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | /** * Created with IntelliJ IDEA. * User: aniket * Date: 30/1/14 * Time: 4:39 PM * To change this template use File | Settings | File Templates. */ public class AllPathsPrinter { int [][] array; int rowCount; int colCount; public AllPathsPrinter( int [][]array){ this .array = array; rowCount = array.length; colCount = array[ 0 ].length; } public void printAllPaths( int currX, int currY, String path){ if (currX == rowCount- 1 ){ for ( int j=currY;j<=colCount- 1 ;j++){ path = path + array[currX][j]; } System.out.println( "Path : " + path); return ; } if (currY == colCount- 1 ){ for ( int i=currX;i<=rowCount- 1 ;i++){ path = path + array[i][currY]; } System.out.println( "Path : " + path); return ; } path = path + array[currX][currY]; printAllPaths(currX+ 1 , currY, path); printAllPaths(currX, currY+ 1 , path); } public static void main(String args[]){ int [][] ar = new int [][]{{ 1 , 2 , 3 }, { 4 , 5 , 6 }}; AllPathsPrinter allPathsPrinter = new AllPathsPrinter(ar); allPathsPrinter.printAllPaths( 0 , 0 , "" ); } } |
Output :
Path : 1456
Path : 1256
Path : 1236
Path : 1256
Path : 1236