第一
2025-08-05 18:00:15
发布于:浙江
3阅读
0回复
0点赞
自己看吧
#include <bits/stdc++.h>
using namespace std;
long long n,mp[1005][1005],hmx,hmi;
int dir[8][2]={0,1,1,0,0,-1,-1,0,-1,1,-1,-1,1,1,1,-1};
bool vis[1005][1005],fd,fx,f=0;
struct node{
int x,y;
};
queue <node> q;
void check(int x,int y){
for(int i=0;i<8;i++){
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(tx>0&&ty>0&&tx<=n&&ty<=n){
if(mp[x][y]>mp[tx][ty]){
fx=1;
}
if(mp[x][y]<mp[tx][ty]){
fd=1;
}
}
}
return;
}
void bfs(int x,int y,int num){
fd=0;
fx=0;
vis[x][y]=1;
q.push({x,y});
check(x,y);
while(!q.empty()){
node temp=q.front();
q.pop();
for(int i=0;i<8;i++){
int tx=temp.x+dir[i][0];
int ty=temp.y+dir[i][1];
if(tx>0&&ty>0&&tx<=n&&ty<=n&&!vis[tx][ty]&&mp[tx][ty]==num){
check(tx,ty);
vis[tx][ty]=1;
q.push({tx,ty});
}
}
}
if(!(fd&&fx)){
if(fd){
hmi++;
}
if(fx){
hmx++;
}
}
return;
}
int main(){
cin>>n;
//cin>>mp[1][1];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>mp[i][j];
}
}
int ans=mp[1][1];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mp[i][j]!=ans){
f=1;
break;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(!vis[i][j]){
bfs(i,j,mp[i][j]);
}
}
}
if(f){
cout<<hmx<<' '<<hmi;
}else{
cout<<1<<' '<<1;
}
return 0;
}
这里空空如也
有帮助,赞一个