提交时间:2025-01-05 18:10:41
运行 ID: 35833
#include <bits/stdc++.h> using namespace std; #define endl "\n" #define int long long int n,m; bool p[53][53]; int d[53][53]; inline bool chk(int x,int y,int ds){ return d[x][y]>ds; } inline void bfs(int s,int t){ memset(d,0x3f,sizeof(d)); d[s][t]=1; deque<pair<int,int>>q; q.push_back({s,t}); while(!q.empty()){ int x=q.front().first,y=q.front().second; q.pop_front(); int ds=d[x][y]; // if(s==15&&t==13) // cout<<x<<" "<<y<<" "<<ds<<endl; if(x>1&&p[x][y]==p[x-1][y]&&chk(x-1,y,ds))d[x-1][y]=ds,q.push_front({x-1,y}); if(y>1&&p[x][y]==p[x][y-1]&&chk(x,y-1,ds))d[x][y-1]=ds,q.push_front({x,y-1}); if(x<n&&p[x][y]==p[x+1][y]&&chk(x+1,y,ds))d[x+1][y]=ds,q.push_front({x+1,y}); if(y<m&&p[x][y]==p[x][y+1]&&chk(x,y+1,ds))d[x][y+1]=ds,q.push_front({x,y+1}); if(x>1&&p[x][y]!=p[x-1][y]&&chk(x-1,y,ds+1))d[x-1][y]=ds+1,q.push_back({x-1,y}); if(y>1&&p[x][y]!=p[x][y-1]&&chk(x,y-1,ds+1))d[x][y-1]=ds+1,q.push_back({x,y-1}); if(x<n&&p[x][y]!=p[x+1][y]&&chk(x+1,y,ds+1))d[x+1][y]=ds+1,q.push_back({x+1,y}); if(y<m&&p[x][y]!=p[x][y+1]&&chk(x,y+1,ds+1))d[x][y+1]=ds+1,q.push_back({x,y+1}); } // exit(0); } bool skp[51][51]; signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); // freopen("draw3.in","r",stdin); // freopen("draw.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ char x; cin>>x; p[i][j]=x-'0'; } for(int i=1;i<=n;i++) skp[i][0]=skp[i][m+1]=1; for(int j=1;j<=m;j++) skp[0][j]=skp[n+1][j]=1; for(int ps=1;ps<=2500;ps++){ for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)if(!p[i][j]) if(skp[i+1][j]||skp[i][j+1]||skp[i-1][j]||skp[i][j-1]) skp[i][j]=1;} // for(int i=1;i<=n;i++,cout<<endl) // for(int j=1;j<=m;j++) // cout<<skp[i][j]; int res=n*m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ bfs(i,j); int mx=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(!skp[i][j]) mx=max(mx,d[i][j]); // if(i==1&&j==1){ // for(int i=1;i<=n;i++,cout<<endl) // for(int j=1;j<=m;j++) // cout<<d[i][j]*(!skp[i][j])<<" "; // } res=min(res,mx); } cout<<res<<endl; return 0; }