SPIKES - Spiky Mazes - SPOJ Solution C++

  Problem Link : SPIKES 


👉 Hint : edit please

 


✅ C++ Solution :

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

int arr1[4]={1,0,0,-1};
int arr2[4]={0,-1,1,0};

bool spikes(int x,int y,char arr[40][40],bool visited[40][40],int cnt,int spk,int n,int m)
{
	int a,b;
	bool ans=false;
	visited[x][y]=1;
	if(cnt>spk)
	    return false;
	for(int i=0;i<4;i++)
	{
		a=x+arr1[i];
		b=y+arr2[i];
		if(a<n && a>=0 && b<m && b>=0 && !visited[a][b] && arr[a][b]!='#')
		{
			if(arr[a][b]=='.')
				ans=ans||spikes(a,b,arr,visited,cnt,spk,n,m);
			else if(arr[a][b]=='s')
				ans=ans||spikes(a,b,arr,visited,cnt+1,spk,n,m);
			else if(arr[a][b]=='x')
			{

				if(cnt<=spk)
					return true;

			}
		}

	}
	visited[x][y]=0;

	return ans;

}

int main()
{
	int n,m,s;
	bool ans;
	cin>>n>>m>>s;
	char arr[40][40];
	bool visited[40][40];
	memset(visited,0,sizeof(visited));
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
			cin>>arr[i][j];
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
			if(arr[i][j]=='@')
			{
				ans=spikes(i,j,arr,visited,0,s/2,n,m);
				if(ans)
					break;
			}

	}
	if(ans)
		cout<<"SUCCESS"<<endl;
	else
		cout<<"IMPOSSIBLE"<<endl;
}

 

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!!