View Code of Problem 3684

#include<iostream>
#include<queue>
#include<bits/stdc++.h>
using namespace std;
int xx[4]={-1,1,0,0};
int yy[4]={0,0,1,-1};
char a[1000][1000];
bool vi[105][105];
int n,m;
long long t;
struct Ch{
	int pos;
	int time;
	int x1;
	int y1;
};
queue<Ch>q;
bool BFS(int x,int y){
	Ch fi;
	fi.x1=x;
	fi.y1=y;
	fi.time=0;
	fi.pos=a[x][y];
	//cout<<(char)fi.pos<<endl;
	q.push(fi);
	vi[fi.x1][fi.y1]=true;
	while(!q.empty()){
		Ch cur=q.front();
	//	cout<<cur.x1<<endl;
		q.pop();
		if(cur.pos=='F' && cur.time<=t){
			return true;
		}
		else{
			for(int i=0;i<4;i++){
				Ch nei;
				nei.x1=cur.x1+xx[i];
				nei.y1=cur.y1+yy[i];
				nei.time=cur.time+1;
				nei.pos=a[nei.x1][nei.y1];
				//cout<<nei.x1<<' '<<nei.y1<<endl;
				//cout<<(char)nei.pos<<endl;
				if(nei.x1>=0&&nei.x1<n&&nei.y1>=0&&nei.y1<m&&nei.pos!='#'&&vi[nei.x1][nei.y1]==false){
				 q.push(nei);vi[nei.x1][nei.y1]=true;
				}
			}
		}
	}
	return false;
}
int main(){
	while(cin>>n>>m>>t){
		memset(a,'0',sizeof(a));
		memset(vi,false,sizeof(vi));
		int x,y;
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				cin>>a[i][j];
				if(a[i][j]=='S'){
					x=i;y=j;
					//cout<<x<<y<<endl;	
				}
			}
		}
		if(BFS(x,y)){
			cout<<"Happy"<<endl;
		}
		else{
			cout<<"Cry"<<endl;
		}
	}
}

Double click to view unformatted code.


Back to problem 3684