看你们大家伙都是bfs,我放一个dfs的
我觉得dfs要短一点吧,好写一点儿
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1005;
int a[N][N],n,gu,feng;
bool vis[N][N];
int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{-1,-1},{-1,1},{1,-1},{1,1}};
bool dfs1(int x,int y){
vis[x][y]=true;
bool is=true;
for(int i=0;i<8;i++){
int newx=x+dir[i][0];
int newy=y+dir[i][1];
if(newx<=0||newx>n||newy<=0||newy>n)
continue;
if(a[newx][newy]==a[x][y]&&!vis[newx][newy]&&!dfs1(newx,newy))
is=false;
if(a[newx][newy]>a[x][y])
is=false;
}
return is;
}
bool dfs2(int x,int y){
bool is=true;
vis[x][y]=true;
for(int i=0;i<8;i++){
int newx=x+dir[i][0];
int newy=y+dir[i][1];
if(newx<=0||newx>n||newy<=0||newy>n)
continue;
if(a[newx][newy]==a[x][y]&&!vis[newx][newy]&&!dfs2(newx,newy))
is=false;
if(a[newx][newy]<a[x][y])
is=false;
}
return is;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(!vis[i][j]&&dfs1(i,j))
feng++;
memset(vis,false,sizeof vis);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(!vis[i][j]&&dfs2(i,j))
gu++;
cout<<feng<<' '<<gu;
}