蒟蒻72分求调.....
  • 板块P1331 海战
  • 楼主Eraser2011
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/9 11:19
  • 上次更新2024/11/9 14:09:39
查看原帖
蒟蒻72分求调.....
1223528
Eraser2011楼主2024/11/9 11:19

#1,#5,#11三个点wa掉了,好像是bad place没有判断出来,求大犇来给孩子讲下吧 代码如下:

#include<bits/stdc++.h>
using namespace std;
//#define int long long
inline int read() {
	int x = 0, f = 1;
	char c = getchar();
	while (c < '0' || c > '9') {
		if (c == '-')f = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9') {
		x = x * 10 + c - '0';
		c = getchar();
	}
	return x * f;
}
const int nextt[4][2] = {1, 0, 0, 1, -1, 0, 0, -1};
char mp[1005][1005];
int n, m;
void dfs(int x, int y) {
	mp[x][y] = '.';//标记成.防止重复搜
	for (int i = 0; i < 4; i++) {
		int dx = x + nextt[i][0], dy = y + nextt[i][1];
		if (mp[dx][dy] == '#' && dx >= 1 && dx <= n && dy >= 1 && dy <= m) {
			dfs(dx, dy);
		}
	}
}
signed main() {
	int ans = 0;
	n = read(), m = read();
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> mp[i][j];
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (mp[i][j] == '.') {
				int tmp = 0;
				for (int k = 0; k < 4; k++) {
					if (mp[i + nextt[k][0]][j + nextt[k][1]] == '#') {
						tmp++;
					}
				}
				if (tmp == 3) {
					puts("Bad placement.");
					exit(0);
				}
			}
		}
	}//判断是否相撞,估计是这儿有问题,少判了些什么
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (mp[i][j] == '#') {
				ans++;
				dfs(i, j);
			}
		}
	}//dfs爆搜找有多少块
	printf("There are %d ships.", ans);
	return 0;
}
2024/11/9 11:19
加载中...