求个查错
查看原帖
求个查错
178804
太阳起晚了呢楼主2021/7/12 18:58
#include<bits/stdc++.h>
using namespace std;
int high=0,low=0,N;
int dx[]={1,-1,0,0};
int dy[]={0,0,-1,1};
int v[1001][1001],a[1001][1001];
bool check(int x,int y)
{
    if(x>N || y>N || x<1 || y<1) return 1;
    else return 0;
}
void bfs(int x,int y)
{
    bool b1=0,b2=0;
    int cnt=0;
    queue<pair<int, int> >Q;
    Q.push(make_pair(x,y));
    cnt++;
    v[x][y]=1;
    while(Q.size())
    {
        pair<int, int>tot=Q.front();
        Q.pop();
        int x1=tot.first,y1=tot.second;
        for(int i=0;i<4;i++)
        {
            int px=x1+dx[i];
            int py=y1+dy[i];
            if(!check(px,py)|| (v[px][py] && a[x1][y1]==a[px][py]))continue;
            else {
                if(a[x1][y1]==a[px][py])
                {
                    Q.push(make_pair(px,py));
                    v[px][py]=1;
                    cnt++;
                }
                else if(a[x1][y1]>=a[px][py]) b1=1;
                else b2=1;
            }
        }
    }
    if(b1&&b2) return;
    else if(b1) high++;
    else if(b2) low++;
    if(cnt==N*N) high++,low++;
    return;
}
int main()
{
    cin>>N;
    for(int i=1;i<=N;i++)
        for(int j=1;j<=N;j++)
    {
        cin>>a[i][j];
    }
    memset(v,false,sizeof(v));
    for(int i=1;i<=N;i++)
        for(int j=1;j<=N;j++)
        {
             if(!v[i][j]) bfs(i,j);
        }
        cout<<high<<' '<<low<<endl;
    return 0;
}

2021/7/12 18:58
加载中...