bfs的简单应用
#include <iostream>
#include <queue>
using namespace std;
typedef pair<int,int> PII;
const int N=1010;
int w[N][N];
bool st[N][N];
bool is_higher=false,is_lower=false;
int n;
int dx[]={-1,-1,-1,0,0,1,1,1},dy[]={-1,0,1,-1,1,-1,0,1};
void bfs(int x,int y)
{
queue<PII> q;
q.push({x,y});
st[x][y]=true;
int ji=w[x][y];
while(q.size())
{
auto t=q.front();
q.pop();
for(int i=0;i<8;i++)
{
int a=t.first+dx[i],b=t.second+dy[i];
if(a<=0||a>n||b<=0||b>n) continue;
if(w[a][b]!=ji)
{
if(w[a][b]>ji)is_higher=true;
else is_lower=true;
}
else if(!st[a][b]){st[a][b]=true;q.push({a,b});}
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>w[i][j];
int high=0,low=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
is_higher=false,is_lower=false;
if(st[i][j])continue;
bfs(i,j);
if(is_higher==false)high++;
if(is_lower==false)low++;
}
cout<<high<<' '<<low<<endl;
return 0;
}