Picos y valles montañosos
Enlace de tema: picos y valles
Descripción del Título
Ideas para resolver problemas
Preguntas de plantilla de búsqueda amplia.
Tenga en cuenta que hay ocho conexiones.
Solo bajo, luego la montaña
Solo alto, luego el valle
Si hay un entorno alto y bajo, no es una montaña ni un valle.
Si no hay alto ni fondo, incluso el pico es un valle.
código
#include<iostream>
#include<cstdio>
using namespace std;
const int xn[9]={
0,0,1,0,-1,1,1,-1,-1};
const int yn[9]={
0,1,0,-1,0,1,-1,1,-1};
int n,sf,sg,ts;
int xx[10000000];
int yy[10000000];
int a[1010][1010];
int v[1010][1010];
void bfs(int sx,int sy)
{
int hd=0,tl=1;
int f=0,g=0;
xx[1]=sx,yy[1]=sy;
while(hd<tl)
{
hd++;
for(int i=1;i<=8;i++)
{
int x=xx[hd]+xn[i];
int y=yy[hd]+yn[i];
if(x<1||x>n||y<1||y>n)
continue;
if(a[x][y]==a[xx[hd]][yy[hd]]&&!v[x][y])
{
tl++;
xx[tl]=x;
yy[tl]=y;
v[x][y]=1;
}
{
if(a[x][y]>a[xx[hd]][yy[hd]])
g=1;
if(a[x][y]<a[xx[hd]][yy[hd]])
f=1;
}
}
}
if(g==1&&f==0)
sg++;
if(g==0&&f==1)
sf++;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(!v[i][j])
{
v[i][j]=1;
bfs(i,j);
ts++;
}
if(ts==1)
cout<<1<<" "<<1<<endl;
else
cout<<sf<<" "<<sg<<endl;
}