谁帮帮我指正必关
查看原帖
谁帮帮我指正必关
993941
xingchen666楼主2023/7/19 15:37

代码:

#include<bits/stdc++.h>
using namespace std;

const int N = 1010;
int n,m;

int a[N][N];
int flag[N][N];
int kong[N][N];

int ways[8][2] = {{1,0},{-1,0},{0,1},{0,-1},{1,-1},{-1,1},{1,1},{-1,-1}};

void dfs(int x, int y){
	for(int i=0;i<8;i++){
		int dx = x+ways[i][0]; int dy = y+ways[i][1];
		if(kong[dx][dy] == 1 && flag[dx][dy] == 0){
			flag[dx][dy] = 1;
			dfs(dx,dy);
		}
	}
}

int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			int way=0;
			for(;way<8;way++){
				if(a[i+ways[way][0]][j+ways[way][1]] == 1) break;
			}
			if(way == 7) kong[i][j] = 1;
		}
	}
	
	int ans=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(kong[i][j] == 1 && flag[i][j] == 0){
				flag[i][j] = 1;
				dfs(i,j);
				ans++;
			}
		}
	}
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j] == 1 && kong[i][j] == 1) continue;
			
			int way=0;
			for(;way<8;way++){
				if(kong[i+ways[way][0]][j+ways[way][1]] == 1){
					break;
				}
			}
			if(way == 7) ans++;
		}
	}
	
	cout<<ans<<endl;
	
	return 0;
}

只会用dfs

路过dalao帮帮忙啊

2023/7/19 15:37
加载中...