提交时间:2025-01-06 09:15:29
运行 ID: 35869
#include<bits/stdc++.h> using namespace std; const int N=55,inf=0x3f3f3f3f; vector<int> E[N*N]; int clr[N*N],tp=0; int bel[N][N]; int dx[]={1,-1,0,0},dy[]={0,0,1,-1}; int n,m; bool mp[N][N]; void dfs(int x,int y,int id){ bel[x][y]=id; for(int i=0;i<4;i++){ int nx=x+dx[i],ny=y+dy[i]; if(nx<1||nx>n||ny<1||ny>m) continue; if(mp[x][y]!=mp[nx][ny]) continue; if(bel[nx][ny]) continue; dfs(nx,ny,id); } }int d[N*N]; void bfs(int s){ memset(d,0x3f,sizeof(d)); d[s]=1; queue<int> q;q.push(s); while(!q.empty()){ int p=q.front();q.pop(); for(auto ed:E[p]){ if(d[ed]<inf) continue; d[ed]=d[p]+1;q.push(ed); } } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ char ch;cin>>ch; mp[i][j]=ch-'0'; } }for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(!bel[i][j]){ clr[++tp]=mp[i][j]; dfs(i,j,tp); } } }for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(i!=n){ if(bel[i][j]!=bel[i+1][j]){ E[bel[i][j]].push_back(bel[i+1][j]); E[bel[i+1][j]].push_back(bel[i][j]); } }if(j!=m){ if(bel[i][j]!=bel[i][j+1]){ E[bel[i][j]].push_back(bel[i][j+1]); E[bel[i][j+1]].push_back(bel[i][j]); } } } }int ans=inf; for(int i=1;i<=tp;i++){ bfs(i); int res=0; for(int j=1;j<=tp;j++){ if(clr[i]!=clr[j]) res=max(res,d[j]); }ans=min(ans,res); }cout<<ans; return 0; }