提交时间:2025-01-05 19:09:22
运行 ID: 35846
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define p_b push_back #define m_p make_pair using namespace std; typedef long long ll; const int maxn=1e5+10,mod=1e9+7; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,m,mx,dis[55][55]; string s[55]; const int dx[]={1,-1,0,0}; const int dy[]={0,0,1,-1}; void bfs(int x,int y){ mx=0;deque<pi>q; memset(dis,0x3f,sizeof(dis)); dis[x][y]=0,q.push_back(m_p(x,y)); while(!q.empty()){ int x=q.front().p1,y=q.front().p2;q.pop_front(); if(s[x][y]=='1')mx=max(mx,dis[x][y]); up(i,0,3){ int nx=x+dx[i],ny=y+dy[i]; if(nx<1||nx>n||ny<1||ny>m||dis[nx][ny]<=(dis[x][y]+(s[nx][ny]!=s[x][y]))) continue; dis[nx][ny]=dis[x][y]+(s[nx][ny]!=s[x][y]); if(s[nx][ny]^s[x][y])q.push_back(m_p(nx,ny)); else q.push_front(m_p(nx,ny)); } } } void slv(){ n=read(),m=read();up(i,1,n)cin>>s[i],s[i]=" "+s[i]; int res=1e9;bool f=0; up(i,1,n)up(j,1,m)mx=0,bfs(i,j),res=min(res,mx+1),f|=(s[i][j]=='1'); if(f) cout<<res;else cout<<0; } int main(){ //freopen("draw.in","r",stdin); //freopen("draw.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }