MKJUMPS - Making Jumps - SPOJ Solution C++

  Problem Link : MKJUMPS 


👉 Hint : Use dfs and map

 


✅ C++ Solution :

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

int arr1[8]={-2,-2,-1,-1,1,1,2,2};
int arr2[8]={-1,1,-2,2,-2,2,-1,1};
pair<int,int> arr[10];
int ans=0;
void knightMove(int x,int y,bool visited[10][10],int n,int dpth)
{
	int a,b,k=0;
	visited[x][y]=1;

	for(int i=0;i<8;i++)
	{
		a=x+arr1[i];
		b=y+arr2[i];
		if(a>=0 && a<n && b>=arr[a].first && b<=arr[a].second && !visited[a][b])
		{
			knightMove(a,b,visited,n,dpth+1);
			k=1;
		}
	}
	if(k==0)
        ans=max(ans,dpth);	
    visited[x][y]=0;    
	
}

int main()
{
	bool visited[10][10];

	int n,skip,col,k=1;
	
	while(1)
	{
		cin>>n;
		if(n==0)
			break;
		memset(visited,0,sizeof(visited));
		int cnt=0;
		ans=0;
		for(int i=0;i<n;i++)
		{
			cin>>skip>>col;
			cnt+=col;
			arr[i].first=skip;
			arr[i].second=col+skip-1;
		}
		int x=0;
		int y=arr[0].first;
		knightMove(x,y,visited,n,1);

		if(cnt-ans==1)
		    cout<<"Case "<<k++<<", 1 square can not be reached."<<endl;
		else
		    cout<<"Case "<<k++<<", "<<cnt-ans<<" squares can not be reached."<<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!!