#include <bits/stdc++.h>
using namespace std;
struct coord{
int x,y;
};
int ans=0;
int a[4][2]={{-1,0},{1,0},{0-1,},{0,1}};
int main()
{
int n,m;
cin >> n >> m;
int s[n+1][m+1];
for(int i=1;i<=n;i++) {
for (int j = 1; j <= m; j++) {
scanf("%1d",&s[i][j]);
}
}
int mm[n+1][m+1];
memset(mm,-1,sizeof (mm));
queue<coord>Q;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
//
if(mm[i][j]==-1&&s[i][j]>0) {
ans++;
Q.push((coord) {i, j});
mm[i][j]=ans;
}
else
continue;
while (!Q.empty())
{
coord temp=Q.front();
Q.pop();
int ux=temp.x;
int uy=temp.y;
for(int p=0;p<4;p++)
{
// printf("i=%d\n",i);
int x=ux+a[p][0];
int y=uy+a[p][1];
if(s[x][y]<=0||mm[x][y]!=-1||x<=0||x>n||y<=0||y>m)
{
continue;
}
else
{
mm[x][y]=ans;
Q.push((coord){x,y});
}
}
// printf("ans= %d\n",ans);
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
printf("%5d ",mm[i][j]);
}
puts("");
}
cout << ans;
}
输入 3 3 110 001 111 输出答案为3