#12pts求调#
查看原帖
#12pts求调#
1048358
zhiyinnitaimeiohbaby楼主2024/6/20 16:22
#include <bits/stdc++.h>
using namespace std;
struct NODE{
	int x,y;
}; 
int G[705][705];
int vis[705][705];
int cnt;int n,m;
int dx[8] = {1,0,-1,0,1,1,-1,-1};
int dy[8] = {0,1,0,-1,1,-1,1,-1};
NODE highest(int x,int y){ // 求当前区块的最高点 
	NODE mx;mx.x = x;mx.y = y; 
	for(int i = 0;i < 8;i++){
		int xx = x + dx[i];int yy = y + dy[i];
		if(G[xx][yy] != 0 && vis[xx][yy] != 1 && G[xx][yy] >= G[x][y]){
			vis[xx][yy] = 1;
			NODE now = highest(xx,yy);
			mx = now;
		}
	}
	return mx;
}
void dfs(int x,int y){ // 清除当前区块 
	int s = G[x][y];
	G[x][y] = 0;
	for(int i = 0;i < 8;i++){
		int xx = x + dx[i];int yy = y + dy[i];
		if(G[xx][yy] != 0 && s >= G[xx][yy]){
			dfs(xx,yy);
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= m;j++){
			cin>>G[i][j];
		}
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= m;j++){
			if(G[i][j] != 0){
				vis[i][j] = 1;
				NODE h = highest(i,j);
				dfs(h.x,h.y);
				cnt++;
			}
		}
	}	
	cout<<cnt<<endl;
	return 0;
	}
2024/6/20 16:22
加载中...