求助
查看原帖
求助
486441
13833925596mm楼主2022/7/29 19:36
#include <bits/stdc++.h>
using namespace std;
int n,m,b[1001][1001];
int dx[10]={-1,-1,-1,0,0,1,1,1},dy[10]={-1,0,1,-1,1,-1,0,1},ans;
struct node{
    int x;
    int y;
    int h;
}a[1002001];
bool fl[1001][1001];
bool cmp(node x,node y){
    return x.h>y.h;
}
void dfs(int x,int y){
   fl[x][y]=true;
    for(int i=0;i<=7;i++){
        int tx=x+dx[i];
        int ty=y+dy[i];
        if(x>0 && y>0 && x<n+1 && y<m+1 && !fl[tx][ty] && b[tx][ty]<=b[x][y]){
            dfs(tx,ty);
        }
    }
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>b[i][j];
	for(int i=1;i<=n;i++){
	    for(int j=1;j<=m;j++){
	        a[i*n-n+j].x=i;
	        a[i*n-n+j].y=j;
	        a[i*n-n+j].h=b[i][j];
	    }
	}
	sort(a+1,a+1+n*m,cmp);
	for(int i=1;i<=n*m;i++){
	    int nx=a[i].x;
	    int ny=a[i].y;
	    if(!fl[nx][ny] && a[i].h>=b[nx-1][ny-1] && a[i].h>=b[nx-1][ny] && a[i].h>=b[nx-1][ny+1] && a[i].h>=b[nx][ny-1] && a[i].h>=b[nx][ny+1] && a[i].h>=b[nx+1][ny+1] && a[i].h>=b[nx+1][ny] && a[i].h>=b[nx+1][ny-1]){
			dfs(nx,ny);
	    	ans++; 
    	}
	}
	cout<<ans;
    return 0;
}
2022/7/29 19:36
加载中...