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 :
/** * 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