dfs求助
查看原帖
dfs求助
169606
Jason12楼主2022/4/30 16:08
#include <bits/stdc++.h>
  using namespace std;
int n,m,a[505][505],l[505][505],r[505][505],dx[4]={1,-1,0,0},dy[4]={0,0,1,-1},s,p,q,i,j;
bool b[505][505];
void dfs(int x,int y)
{
	int k,u,v;
	b[x][y]=1;
	s--;
	for (k=0;k<4;k++)
	{
		u=x+dx[k];
		v=y+dy[k];
		if (!b[u][v] && (u>=1 && u<=n) && (v>=1 && v<=m) && (a[u][v]<a[x][y]))
		{
			dfs(u,v);
			l[x][y]=min(l[x][y],l[u][v]);
			r[x][y]=max(r[x][y],r[u][v]);
		}
	}
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n>>m;
	for (i=1;i<=n;i++)
	{
		for (j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	s=n*m;
	memset(l,0x3f,sizeof(l));
	for (i=1;i<=m;i++)
	{
		l[n][i]=i;
		r[n][i]=i;
	}
	for (i=1;i<=m;i++)
	{
		if (!b[1][i]) dfs(1,i);
	}
	if (s)
	{
		cout<<0<<endl<<s<<endl;
		return 0;
	}
	p=1;
	while (p<=m)
	{
		q=0;
		for (i=1;i<=m;i++)
		{
			if (l[1][i]<=p) q=max(q,r[1][i]);
		}
		s++;
		p=q+1;
	}
	cout<<1<<endl<<s<<endl;
	return 0;
}

样例 1 过了,样例 2 输出

1
4
2022/4/30 16:08
加载中...