鏈接:登錄—專業IT筆試面試備考平臺_牛客網
來源:牛客網
?
題目描述
小明現在在玩一個游戲,游戲來到了教學關卡,迷宮是一個N*M的矩陣。
小明的起點在地圖中用“S”來表示,終點用“E”來表示,障礙物用“#”來表示,空地用“.”來表示。
障礙物不能通過。小明如果現在在點(x,y)處,那么下一步只能走到相鄰的四個格子中的某一個:(x+1,y),(x-1,y),(x,y+1),(x,y-1);
小明想要知道,現在他能否從起點走到終點。
輸入描述:
本題包含多組數據。 每組數據先輸入兩個數字N,M 接下來N行,每行M個字符,表示地圖的狀態。 數據范圍: 2<=N,M<=500 保證有一個起點S,同時保證有一個終點E.
輸出描述:
每組數據輸出一行,如果小明能夠從起點走到終點,那么輸出Yes,否則輸出No
示例1
輸入
復制3 3 S.. ..E ... 3 3 S## ### ##E
3 3 S.. ..E ... 3 3 S## ### ##E
輸出
復制Yes No
Yes No
分析:
注意多組輸入,記得初始化
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct fx{ll x,y;
};
ll n,m;
queue<fx> q;
char g[502][502];
ll used[502][502];
ll dx[]={0,1,0,-1},dy[]={1,0,-1,0};
void init()
{queue<fx> q1;q=q1;memset(used,0,sizeof(used));
}
void bfs()
{while(q.size()){auto a=q.front();q.pop();for(ll i=0;i<4;i++){ll x=a.x+dx[i],y=a.y+dy[i];if(x<1||x>n||y<1||y>m)continue;if(used[x][y])continue;if(g[x][y]=='#')continue;used[x][y]=1;if(g[x][y]=='E'){cout<<"Yes"<<'\n';return ;}q.push({x,y});}}cout<<"No"<<'\n';
}
void solve()
{while(cin>>n>>m){init();for(ll i=1;i<=n;i++){for(ll j=1;j<=m;j++){cin>>g[i][j];if(g[i][j]=='S'){q.push({i,j});used[i][j]=1;}}}bfs();}
}
int main()
{ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);solve();return 0;
}