哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛) C.Coronavirus (BFS)
-
题意:有一个图,要求从\(S\)走到\(E\),\(.\)表示可以走的路径,\(*\)周围的八个方向均不能走,要求判断是否能走到\(E\),若能,输出最小路径长度,否则输出\(Impossible\).
-
题解:我们先把\(*\)周围的点标记一下,然后判断\(E\)是否被标记过了,如果没有,则找到\(S\)的位置进行BFS,结构体\(s\)记录坐标和路径,每次判断一下,然后再把点入队搞搞就好了.
其实就是BFS的板子题.
-
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <stack> #include <queue> #include <vector> #include <map> #include <set> #include <unordered_set> #include <unordered_map> #define ll long long #define fi first #define se second #define pb push_back #define me memset const int N = 1e6 + 10; const int mod = 1e9 + 7; const int INF = 0x3f3f3f3f; using namespace std; typedef pair<int,int> PII; typedef pair<ll,ll> PLL; int n,m; int ans; char a[100][100]; bool vis[100][100]; int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1}; struct s{ int x,y,cnt; }p; bool bfs(int x,int y){ queue<s> q; vis[x][y]=true; p.x=x,p.y=y,p.cnt=0; q.push(p); while(!q.empty()){ s tmp=q.front(); q.pop(); if(a[tmp.x][tmp.y]=='E'){ ans=tmp.cnt; return true; } for(int i=0;i<4;++i){ int tx=tmp.x+dx[i]; int ty=tmp.y+dy[i]; if((a[tx][ty]=='.'||a[tx][ty]=='E') && !vis[tx][ty]){ vis[tx][ty]=true; p.x=tx,p.y=ty,p.cnt=tmp.cnt+1; q.push(p); } } } return false; } int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>n>>m; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ cin>>a[i][j]; } } for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ if(a[i][j]=='*'){ if(a[i+1][j]!='*') a[i+1][j]=-1; if(a[i+1][j+1]!='*') a[i+1][j+1]=-1; if(a[i][j+1]!='*') a[i][j+1]=-1; if(a[i-1][j+1]!='*') a[i-1][j+1]=-1; if(a[i-1][j]!='*') a[i-1][j]=-1; if(a[i-1][j-1]!='*') a[i-1][j-1]=-1; if(a[i][j-1]!='*') a[i][-1]=-1; if(a[i+1][j-1]!='*') a[i+1][j-1]=-1; } } } bool ok=0; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ if(a[i][j]=='E'){ ok=1; } } } if(!ok){ cout<<"Impossible"<<endl; return 0; } for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ if(a[i][j]=='S'){ ok=bfs(i,j); } } } if(ok) cout<<ans<<endl; else cout<<"Impossible"<<endl; return 0; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮