用BFS,不要用DFS.
#include <iostream>
#include <queue>
using namespace std;
typedef pair<int, int> PII;
const int N = 1010;
int g[N][N];
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};
int ans1,ans2;
bool st[N][N];
int n;
void bfs(int x,int y)
{
st[x][y]=true;
queue<PII> q;
bool flag1=true,flag2=true;
q.push({x,y});
while(q.size())
{
auto t=q.front();
q.pop();
int nx=t.first,ny=t.second;
for(int i=0;i<8;i++)
{
int a=nx+dx[i],b=ny+dy[i];
if(a<0 ||a>=n ||b<0 ||b>=n) continue;
if(g[a][b]> g[x][y]) flag1=false;
if(g[a][b]< g[x][y]) flag2=false;
if(st[a][b]) continue;
if(g[a][b]==g[x][y]) st[a][b]=true,q.push({a,b});
}
}
if(flag1) ans1++;
if(flag2) ans2++;
}
int main()
{
cin >> n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin >> g[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(st[i][j]==false) bfs(i,j);
cout<<ans1<<' '<<ans2;
return 0;
}