View Code of Problem 3684

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
char arr[1000][1000];
bool isvisited[1000][1000];
int direction[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int t;
bool dfs(int x,int y,int n,int m,int count){
	isvisited[x][y]=true;
	if(arr[x][y]=='F'&&count<=t){
		return true;
	}
	for(int i=0;i<4;i++){
		if(x+direction[i][0]>=0&&x+direction[i][0]<n&&
			y+direction[i][1]>=0&&y+direction[i][1]<m&&
			isvisited[x+direction[i][0]][y+direction[i][1]]==false&&
			arr[x+direction[i][0]][y+direction[i][1]]!='#'){
				if(dfs(x+direction[i][0],y+direction[i][1],n,m,count+1)==true)return true;
			}
	}
	isvisited[x][y]=false;
	return false;
	
}
int main()
{
	
	int n,m;
	while(cin>>n>>m>>t){
		memset(arr,' ',sizeof(arr));
		memset(isvisited,false,sizeof(isvisited));
		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]=='S'){
					if(dfs(i,j,n,m,0)){
						cout<<"Happy"<<endl;
					}else{
						cout<<"Cry"<<endl;
					}
				}
			}
		}
		
	}
	
	return 0;
 } 

Double click to view unformatted code.


Back to problem 3684