【AtCoder】AtCoder Grand Contest 033 解題報告($A$)
阿新 • • 發佈:2020-07-27
前言
又是一場過去的\(AtCoder\)。
一邊希望著題目不會太難,一邊卻又希望題目能有足夠的難度,讓我從中學到更多。
\(A\):Darker and Darker(點此看題面)
大致題意: 給定一個\(n\times m\)的矩形,上面有一些黑格子。每個時刻所有與黑格子有邊相鄰的白格子會被染黑,問多久以後所有格子被染黑。
顯然的\(BFS\),甚至可以算作\(BFS\)的板子,不加贅述了。
#include<bits/stdc++.h> #define Tp template<typename Ty> #define Ts template<typename Ty,typename... Ar> #define Reg register #define RI Reg int #define Con const #define CI Con int& #define I inline #define W while #define N 1000 using namespace std; const int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};//四個方向 int n,m,vis[N+5][N+5];char s[N+5][N+5];struct Data {int x,y,t;}q[N*N+5]; int main() { RI i,j,H=1,T=0;for(scanf("%d%d",&n,&m),i=1;i<=n;++i) for(scanf("%s",s[i]+1),j=1;j<=m;++j) s[i][j]=='#'&&(q[++T]=(Data){i,j,0},vis[i][j]=1);//初始化佇列 Data k;RI nx,ny;W(H<=T) for(k=q[H++],i=0;i^4;++i) (nx=k.x+dx[i])&&nx<=n&&//BFS (ny=k.y+dy[i])&&ny<=m&&!vis[nx][ny]&&(q[++T]=(Data){nx,ny,k.t+1},vis[nx][ny]=1);//擴充套件 return printf("%d\n",q[T].t),0;//輸出最後一個格子被染黑的時間 }