#include<iostream>
#include<cstring>
using namespace std;
int n,m,ans;
int a[1010][1010];
int v[1010][1010];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
void dfs(int x,int y,int color)
{
a[x][y]=color;
for(int i=0;i<4;i++)
{
int nx=x+dir[i][0];
int ny=y+dir[i][1];
//判断是否越界并且已经走过了或者是否为海洋
if(nx>0&&nx<=n&&ny>0&&ny<=m&&v[nx][ny]==0&&a[nx][ny]>0)
{
ans++;
v[nx][ny]=1;
dfs(nx,ny,-1);
//本题不同的是这里不需要将v[][]重置
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
ans=1;
v[6][8]=1;
dfs(6,8,-1);
cout<<ans<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
染色问题(DFS)
于 2022-02-18 19:18:06 首次发布