// Program to Print All Possible Paths from Top Left to Bottom Right of a Matrix
#include<bits/stdc++.h>
using namespace std;
void printVector(vector<int> &v){
for(auto it:v){
cout<<it<<" ";
}
cout<<"\n";
}
void printPaths(int mat[][3], vector<int> &v, int i, int j, int n, int m){
if(i > n || j > m) return;
if(i==n && j==m){
printVector(v);
return;
}
v.push_back(mat[i][j]);
printPaths(mat,v,i+1,j,n,m);
printPaths(mat,v,i,j+1,n,m);
v.pop_back();
}
void printPathUtil(int mat[][3], int n, int m){
vector<int> v;
printPaths(mat,v,0,0,n,m);
}
int main(){
int mat[3][3]={
{1,2,3},
{4,5,6},
{7,8,9}
};
int n=3,m=3;
printPathUtil(mat,n-1,m-1);
return 0;
}
Ly8gUHJvZ3JhbSB0byBQcmludCBBbGwgUG9zc2libGUgUGF0aHMgZnJvbSBUb3AgTGVmdCB0byBCb3R0b20gUmlnaHQgb2YgYSBNYXRyaXgKCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHByaW50VmVjdG9yKHZlY3RvcjxpbnQ+ICZ2KXsKCWZvcihhdXRvIGl0OnYpewoJCWNvdXQ8PGl0PDwiICI7Cgl9Cgljb3V0PDwiXG4iOwp9Cgp2b2lkIHByaW50UGF0aHMoaW50IG1hdFtdWzNdLCB2ZWN0b3I8aW50PiAmdiwgaW50IGksIGludCBqLCBpbnQgbiwgaW50IG0pewoKCWlmKGkgPiBuIHx8IGogPiBtKSByZXR1cm47CgoJaWYoaT09biAmJiBqPT1tKXsKCQlwcmludFZlY3Rvcih2KTsKCQlyZXR1cm47Cgl9CgkKCXYucHVzaF9iYWNrKG1hdFtpXVtqXSk7CgoJcHJpbnRQYXRocyhtYXQsdixpKzEsaixuLG0pOwoJcHJpbnRQYXRocyhtYXQsdixpLGorMSxuLG0pOwoKCXYucG9wX2JhY2soKTsKfQoKdm9pZCBwcmludFBhdGhVdGlsKGludCBtYXRbXVszXSwgaW50IG4sIGludCBtKXsKCgl2ZWN0b3I8aW50PiB2OwoJcHJpbnRQYXRocyhtYXQsdiwwLDAsbixtKTsKfQoKaW50IG1haW4oKXsKCglpbnQgbWF0WzNdWzNdPXsKCQl7MSwyLDN9LAoJCXs0LDUsNn0sCgkJezcsOCw5fQoJfTsKCglpbnQgbj0zLG09MzsKCglwcmludFBhdGhVdGlsKG1hdCxuLTEsbS0xKTsKCglyZXR1cm4gMDsKfQ==