思路:BFS
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 #define MAXN 1100 8 int d[MAXN][MAXN]; 9 char a[MAXN][MAXN]; 10 pair<int,int> Q[MAXN*MAXN]; 11 int n,m; 12 int main() 13 { 14 int left=1,right=0; 15 memset(d,0x3f,sizeof(d)); 16 int i,j,x,y; 17 scanf("%d%d",&n,&m); 18 for(i=0;i<n;i++) 19 scanf("%s",a[i]); 20 for(i=0;i<n;i++) 21 for(j=0;j<m;j++) 22 if(a[i][j]==49) 23 { 24 d[i][j]=0; 25 Q[++right].first=i; Q[right].second=j; 26 } 27 while(left<=right) 28 { 29 x=Q[left].first; y=Q[left++].second; 30 if(x>0&&d[x][y]+1<d[x-1][y]) 31 { 32 d[x-1][y]=d[x][y]+1; 33 Q[++right].first=x-1; Q[right].second=y; 34 } 35 if(y<m-1&&d[x][y]+1<d[x][y+1]) 36 { 37 d[x][y+1]=d[x][y]+1; 38 Q[++right].first=x; Q[right].second=y+1; 39 } 40 if(y>0&&d[x][y]+1<d[x][y-1]) 41 { 42 d[x][y-1]=d[x][y]+1; 43 Q[++right].first=x; Q[right].second=y-1; 44 } 45 if(x<n-1&&d[x][y]+1<d[x+1][y]) 46 { 47 d[x+1][y]=d[x][y]+1; 48 Q[++right].first=x+1; Q[right].second=y; 49 } 50 } 51 for(i=0;i<n;i++) 52 { 53 for(j=0;j<m;j++) 54 printf("%d ",d[i][j]); 55 printf("\n"); 56 } 57 return 0; 58 }