Timus 1033 Labyrinth Solution

#include <iostream>
#include <vector>
#include <bitset>
#include <deque>
#include <algorithm>
#include <cstdlib>
#include <string>
#include <map>
using namespace std;
int n;//3-33
vector<vector<char> > a(33,vector<char>(33));
bitset<1500> vis;//i*n+j
int flood(int i,int j){
    if(i==-1&&j==0||i==0&&j==-1)return 0;
    if(i==n-1&&j==n||i==n&&j==n-1)return 0;
    if(i<0||i==n||j<0||j==n||a[i][j]=='#')return 1;
    if(vis[i*n+j])return 0;
    vis[i*n+j]=1;
    return flood(i+1,j)+flood(i,j+1)+flood(i-1,j)+flood(i,j-1);
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        ws(cin);
        for(int j=0;j<n;j++)
            cin>>a[i][j];
    }
    cout<<(flood(0,0)+flood(n-1,n-1))*9<<endl;
}

Comments