大佬求调 50分 ,
查看原帖
大佬求调 50分 ,
933614
zhou_young楼主2024/7/21 15:35
#include<iostream>

using namespace std;

const int N = 1005;

int st[N][N];
int p[N][N];
int n,m;
int dx[]= {0,1,0,-1},dy[]= {-1,0,1,0};
void dfs(int a,int b) {
	p[a][b] = -1; // 即扫过了 
	for(int i = 0; i< 4; i++) {
		int x = dx[i] + a, y = b + dy[i];
		if(p[x][y] == 0 && x > 0 && x <= n && y <= m && y >0) {
			dfs(x,y);
		}
	}
}
bool check(int i,int j) {
	if(p[i][j]) {
		int cnt = 0;
		if(p[i-1][j-1] > 0) cnt ++;
		if(p[i-1][j] > 0) cnt ++;
		if(p[i-1][j+1] > 0) cnt ++;
		if(p[i][j-1] > 0) cnt ++;
		if(p[i][j+1] > 0 ) cnt ++;
		if(p[i+1][j-1] > 0) cnt ++;
		if(p[i+1][j] > 0) cnt ++;
		if(p[i+1][j+1] > 0) cnt ++;
		if(i == 1 && j == 1) {
			return cnt == 3;
		} else if(i == n && j == m) {
			return cnt == 3;
		} else if(i == 1 && j==m) {
			return cnt == 3;
		} else if(i == n && j == 1) {
			return cnt ==3;
		} else if(i == 1) {
			return cnt == 5;
		} else if(i == n) {
			return cnt == 5;
		} else if(j == 1) {
			return cnt == 5;
		} else if(j == m) {
			return cnt == 5;
		}
		return cnt == 8;
	} else {
		dfs(i,j);
		return true;
	}
}
int main() {
	scanf("%d%d",&n,&m);
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			scanf("%d",&st[i][j]);
		}
	}
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			if(st[i][j] == 0) { // 数四周的雷数 
				if(st[i-1][j-1] == 1) p[i][j] ++;
				if(st[i-1][j] == 1) p[i][j] ++;
				if(st[i-1][j+1] == 1) p[i][j] ++;
				if(st[i][j-1] == 1) p[i][j] ++;
				if(st[i][j+1] == 1) p[i][j] ++;
				if(st[i+1][j-1] == 1) p[i][j] ++;
				if(st[i+1][j] == 1) p[i][j] ++;
				if(st[i+1][j+1] == 1) p[i][j] ++;
			} else {
				p[i][j] = 100; // 是雷就标记为100 
			}
		}
	}
//	for(int i = 1; i <= n; i++) {
//		for(int j = 1; j <= m; j++) {
//			cout<< p[i][j] <<' ';
//		}
//		puts("");
//	}
	int ans = 0;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			if(st[i][j] == 0) {
				if(check(i,j)) {
					ans++;
//					cout<<i<<' '<<j<<endl;
				}
			}
		}
	}
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			cout<< p[i][j] <<' ';
		}
		puts("");
	}
	printf("%d",ans);



	return 0;
}

求助求助

2024/7/21 15:35
加载中...