求助! P1506 拯救oibh总部
  • 板块学术版
  • 楼主credente
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/13 11:10
  • 上次更新2024/8/13 14:02:36
查看原帖
求助! P1506 拯救oibh总部
1285014
credente楼主2024/8/13 11:10

有没有大佬会

用BFS写

P1506 拯救oibh总部

题解看不懂

求大佬写个(写个注释也可以)!!!

题解(下面)

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N=3000+10;
int n,m;
int sum,a[N],b[N];
int x[]={1,-1,0,0},
	y[]={0,0,-1,1};
char ch;
bool boolr,s[N][N];
void asd(int u,int v)
{
	int t,q,r=1,f=0;
	a[r]=u;
	b[r]=v;
	s[u][v]=false;
	while(r>f)
	{
		for(int i=0;i<4;i++)
		{
			t=a[f+1]+x[i];
			q=b[f+1]+y[i];
			if(t>0&&q>0&&t<=n&&q<=m&&s[t][q])
			{
				r++;
				s[t][q]=false;
				a[r]=t;
				b[r]=q;
				if(boolr)
				{
					sum++;
				}
			}
		}
		f++;
	}
}
int main()
{
	memset(s,true,sizeof(s));
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>ch;
			ch=='0'?s[i][j]=true:s[i][j]=false;
		}
	}
	for(int i=0;i<=n+1;i++)
	{
		for(int j=0;j<=m+1;j++)
		{
			if(j==0||i==0||i==n+1||j==m+1)
			{
				if(s[i][j])
				{
					asd(i,j);
				}
			}
		}
	}
	boolr=true;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(s[i][j])
			{
				asd(i,j);
				sum++;
			}
		}
	}
	cout<<sum;
	return 0;
}
2024/8/13 11:10
加载中...