搜索80分代码RE求调
查看原帖
搜索80分代码RE求调
1271613
A_W_Lee楼主2024/10/22 15:41

RT

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 155;
int mp[MAXN][MAXN], cnt = 0, sum, n, m;
bool mpf[MAXN][MAXN];

void dfs(int x, int y) {
	mpf[x][y] = 1, cnt++;

	if (x != 1) {
		if (y != 1) {
			if (mp[x - 1][y - 1] != -1 && !mpf[x - 1][y - 1])
				dfs(x - 1, y - 1);
			else if (mp[x - 1][y - 1] == -1)
				mp[x][y]++;
		}

		if (y != n) {
			if (mp[x - 1][y + 1] != -1 && !mpf[x - 1][y + 1])
				dfs(x - 1, y + 1);
			else if (mp[x - 1][y + 1] == -1)
				mp[x][y]++;
		}

		if (mp[x - 1][y] != -1 && !mpf[x - 1][y])
			dfs(x - 1, y);
		else if (mp[x - 1][y] == -1)
			mp[x][y]++;
	}

	if (x != m) {
		if (y != 1) {
			if (mp[x + 1][y - 1] != -1 && !mpf[x + 1][y - 1])
				dfs(x + 1, y - 1);
			else if (mp[x + 1][y - 1] == -1)
				mp[x][y]++;
		}

		if (y != n) {
			if (mp[x + 1][y + 1] != -1 && !mpf[x + 1][y + 1])
				dfs(x + 1, y + 1);
			else if (mp[x + 1][y + 1] == -1)
				mp[x][y]++;
		}

		if (mp[x + 1][y] != -1 && !mpf[x + 1][y])
			dfs(x + 1, y);
		else if (mp[x + 1][y] == -1)
			mp[x][y]++;
	}

	if (y != 1) {
		if (mp[x][y - 1] != -1 && !mpf[x][y - 1])
			dfs(x, y - 1);
		else if (mp[x][y - 1] == -1)
			mp[x][y]++;
	}

	if (y != n) {
		if (mp[x][y + 1] != -1 && !mpf[x][y + 1])
			dfs(x, y + 1);
		else if (mp[x][y + 1] == -1)
			mp[x][y]++;
	}

}

signed main() {
	int   mines = 0;
	char c;
	cin >> n >> m;

	for (int i = 1; i <= n; i++) {

		for (int j = 1; j <= m; j++) {

			cin >> c;

			if (c == '*')
				mp[i][j] = -1, mines++;
		}
	}

	sum = n * m - mines;

	for (int i = 1; i <= n; i++) {

		for (int j = 1; j <= m; j++) {

			if (mp[i][j] == 0) {
				
				if (!mpf[i][j])
					dfs(i, j);
			}
		}
	}


	for (int i = 1; i <= n; i++) {

		for (int j = 1; j <= m; j++) {

			if (mp[i][j] == -1)
				cout << '*';
			else
				cout << mp[i][j];
		}

		cout << '\n';
	}


	return 0;
}

救救孩子!

2024/10/22 15:41
加载中...