第一
2025-08-05 18:00:15
发布于:浙江
7阅读
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;
}
这里空空如也





有帮助,赞一个