......?
查看原帖
......?
712083
UKError楼主2023/8/3 10:23

染色问题的想法,But 40 分。

#include <bits/stdc++.h>
using namespace std;
int n,m,sum;
char num[1050][1050];

void dfs(int x,int y)
{
	if(x<=0||y<=0||x>n||y>m) return;
	if(num[x+1][y]=='0'&&num[x-1][y]=='0'&&num[x][y+1]=='0'&&num[x][y-1]=='0') return;
	if(y-1>0&&num[x][y-1]!='0')
	{
		num[x][y-1]='0';
		y-=1;
		dfs(x,y);
	}
	if(num[x+1][y]=='0'&&num[x-1][y]=='0'&&num[x][y+1]=='0'&&num[x][y-1]=='0') return;
	if(y+1<=m&&num[x][y+1]!='0')
	{
		num[x][y+1]='0';
		y+=1;
		dfs(x,y);
	}
	if(num[x+1][y]=='0'&&num[x-1][y]=='0'&&num[x][y+1]=='0'&&num[x][y-1]=='0') return;
	if(x-1>0&&num[x-1][y]!='0')
	{
		num[x-1][y]='0';
		x-=1;
		dfs(x,y);
	}
	if(num[x+1][y]=='0'&&num[x-1][y]=='0'&&num[x][y+1]=='0'&&num[x][y-1]=='0') return;
	if(x+1<=n&&num[x+1][y]!='0')
	{
		num[x+1][y]='0';
		x+=1;
		dfs(x,y);
	}
	if(num[x+1][y]=='0'&&num[x-1][y]=='0'&&num[x][y+1]=='0'&&num[x][y-1]=='0') return;
	return;
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>num[i][j];
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(num[i][j]!='0')
			{
				num[i][j]='0';
				dfs(i,j);
				sum++;
			}
		}
	}
	printf("%d",sum);
	return 0;
}
2023/8/3 10:23
加载中...