bfs90 求调
查看原帖
bfs90 求调
1054021
114_Hzh_AK_NOIP_514楼主2024/5/12 16:34
#include <bits/stdc++.h>
using namespace std;
struct node1
{
	int x,y;
}t,u;
struct node2
{
	int s,e;
}a[600],last;
queue <node1> q;
int n,m,cnt,num;
int mapp[505][505];
bool book1[505][505],book2[505],f=1;
int d[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void bfs(int x,int y,int s)
{
	book1[x][y]=1;
	t.x=x;
	t.y=y;
	q.push(t);
	while(!q.empty())
	{
		t=q.front();
		q.pop();
		if(t.x==n)
		{
			book2[t.y]=1;
			a[s].s=min(a[s].s,t.y);
			a[s].e=max(a[s].e,t.y);		
		}
		for(int i=0;i<4;i++)
		{
			int nx=t.x+d[i][0];
			int ny=t.y+d[i][1];
			if(nx<1 || nx>n || ny<1 || ny>m) continue;
			if(mapp[nx][ny]<mapp[t.x][t.y] && book1[nx][ny]==0)
			{
				book1[nx][ny]=1;
				u.x=nx;
				u.y=ny;
				q.push(u);
			}
		}
	}
}
bool cmp(node2 a,node2 b)
{
	return a.e>b.e;
}
int main()
{
	cin >> n >> m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin >> mapp[i][j];
		}
	}
	for(int i=1;i<=m;i++)
	{
		a[i].s=600;
		a[i].e=0;
	}
	for(int i=1;i<=m;i++)
	{
		memset(book1,0,sizeof(book1));
		bfs(1,i,i);
	}
	for(int i=1;i<=m;i++)
	{
		if(book2[i]==0) num++;
	}
	if(num>0)
	{
		cout<<0<<endl<<num;
		return 0;
	}
	sort(a+1,a+n+1,cmp);
	last.s=0;
	last.e=0;
	while(last.e<m)
	{
		for(int i=1;i<=m;i++)
		{
			if(a[i].s>=last.s+1 && a[i].s<=last.e+1)
			{
				cnt++;
				last=a[i];
				break;
			}
		}
	}
	cout<<1<<endl<<cnt;
	return 0;
}
2024/5/12 16:34
加载中...