pranay_teja
11/4/2018 - 6:34 PM

RatInAMaze-NumberOfPaths

#include<bits/stdc++.h>
using namespace std;

// #Backtracking

int numPaths(vector<vector<int> > a, int r, int c, map< pair<int,int>, int > &memo);

int main(){
    //freopen("ip.txt","r",stdin);
    int t;
    cin>>t;
    while(t--){
        int r,c;
        cin>>r>>c;
        vector< vector<int> > a(r);
        for(int i=0;i<a.size();i++){
            a[i].resize(c);
            for(int j=0;j<a[i].size();j++){
                cin>>a[i][j];
            }
        }
        map< pair<int,int>, int > memo;
        cout<<numPaths(a,0,0,memo)<<endl;
    }
    return 0;
}

int numPaths(vector<vector<int> > a, int r, int c, map< pair<int,int>, int > &memo){
    if(r==a.size()-1 && c==a[r].size()-1 && a[r][c]==0){
        memo[{r,c}]=1;
        return memo[{r,c}];
    }
    if(memo.find({r,c})!=memo.end()){
        return memo[{r,c}];
    }
    if(r<a.size() && c<a[r].size() && a[r][c]==0){
        memo[{r,c}]=numPaths(a,r+1,c,memo)+numPaths(a,r,c+1,memo);
        return memo[{r,c}];
    }
    return 0;   // else no paths
}