BFS求助
查看原帖
BFS求助
916051
sjy_2023楼主2024/3/21 17:08
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;

int n,m;
char s[110][110];
short map[110][110];
bool flag[110][110];
int t=0;

int fx[4]={1,-1,0,1};
int fy[4]={0,0,1,-1};

queue <int> qx;
queue <int> qy;

void bfs(int x,int y)
{
	t+=1;
	qx.push(x);
	qy.push(y);
	
	while(!qx.empty()) 
	{
		x=qx.front();	qx.pop();
		y=qy.front();	qy.pop();
		
		map[x][y]=t;
		for(int i=0;i<4;i++)
		{	if( x+fx[i]>=0 && x+fx[i]<n && y+fy[i]>=0 && y+fy[i]<m && flag[x+fx[i]][y+fy[i]]==1 && map[x+fx[i]][y+fy[i]]==0 )
			{	map[x+fx[i]][y+fy[i]]=t;
				qx.push(x+fx[i]);
				qy.push(y+fy[i]);
			}
		}
	}
	
	return;
}

int main()
{
	scanf("%d%d",&n,&m);
	
	for(int i=0;i<n;i++)
	{	scanf("%s",s[i]);	}
	
	for(int i=0;i<n;i++)
	{	for(int k=0;k<m;k++)
		{	if( s[i][k]!='0' )
			{	flag[i][k]=1;	}
		}
	}
	
	for(int i=0;i<n;i++)
	{	for(int k=0;k<m;k++)
		{	if( flag[i][k]==1 && map[i][k]==0 )
			{	bfs(i,k);	}
		}
	}
	
	for(int i=0;i<n;i++)
	{	for(int k=0;k<m;k++)
		{	printf("%d",map[i][k]);	}
		printf("\n");
	}
	
	printf("%d",t);
	return 0;
}

思路: 先把非0的数字转化为1 然后找连通块

玄关

2024/3/21 17:08
加载中...