C - Ice Cave
#include<bits/stdc++.h> using namespace std; #define maxn 505 int n,m; int sx,sy,ex,ey; char mmp[maxn][maxn]; int to[4][2]= {{1,0},{0,1},{-1,0},{0,-1}}; struct node { int x,y; } temp,test; bool judge(node test) { if(test.x<0||test.x>=n||test.y<0||test.y>=m) return false; return true; } queue<node>que; void bfs() { temp.x=sx; temp.y=sy; que.push(temp); while(!que.empty()) { temp=que.front(); que.pop(); for(int i=0; i<4; i++) { test.x=temp.x+to[i][0]; test.y=temp.y+to[i][1]; if(judge(test)) { if(mmp[test.x][test.y]=='X') { if(test.x==ex&&test.y==ey) { cout<<"YES"<<endl; return; } } else { mmp[test.x][test.y]='X'; que.push(test); } } } } cout<<"NO"<<endl; } int main() { cin>>n>>m; for(int i=0; i<n; i++) for(int j=0; j<m; j++) cin>>mmp[i][j]; cin>>sx>>sy>>ex>>ey; sx--; sy--; ex--; ey--; bfs(); return 0; }