➤ Problem Link : 1063B. Labyrinth
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int l[]={-1,1,0,0};
int r[]={0,0,1,-1};
int main()
{
int n,m,si,sj,tj;
cin>>n>>m;
cin>>si>>sj;
si--;
sj--;
tj=sj;
ll x,y;
cin>>x>>y;
char arr[n][m];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>arr[i][j];
deque<pair<int,int> > Q;
ll dis[n][m];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
dis[i][j]=INT_MAX;
dis[si][sj]=0;
Q.push_back(make_pair(si,sj));
while(!Q.empty())
{
si=Q.front().first;
sj=Q.front().second;
Q.pop_front();
int val;
for(int i=0;i<4;i++)
{
if(i==0 || i==1 || i==3)
{
if(si+l[i]>=0 && si+l[i] < n && sj+r[i]>=0 && sj+r[i] < m && arr[si+l[i]][sj+r[i]]!='*')
{
if(dis[si+l[i]][sj+r[i]] > dis[si][sj])
{
dis[si+l[i]][sj+r[i]] = dis[si][sj];
Q.push_front(make_pair(si+l[i],sj+r[i]));
}
}
}
else
{
if(si+l[i]>=0 && si+l[i] < n && sj+r[i]>=0 && sj+r[i] < m && arr[si+l[i]][sj+r[i]]!='*')
{
if(dis[si+l[i]][sj+r[i]] > dis[si][sj]+1)
{
dis[si+l[i]][sj+r[i]] = dis[si][sj]+1;
Q.push_back(make_pair(si+l[i],sj+r[i]));
}
}
}
}
}
ll ans=0;
int lt,rt;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(arr[i][j]=='*')
continue;
rt=dis[i][j];
lt=rt-j+tj;
if(lt<=x && rt<=y)
{
ans++;
}
}
cout<<ans;
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
