没过样例但是AC 代码:
#include <bits/stdc++.h>
using namespace std;
#define MAXN 1005
int r, c, cnt, dx[] = {1, -1, 0, 0}, dy[] = {0, 0, 1, -1};
char s[MAXN][MAXN];
bool vis[MAXN][MAXN];
bool chk (int i, int j) {
int cnt = 0;
cnt += ((s[i][j] == '#') ? 1 : 0);
cnt += ((s[i + 1][j] == '#') ? 1 : 0);
cnt += ((s[i][j + 1] == '#') ? 1 : 0);
cnt += ((s[i + 1][j + 1] == '#') ? 1 : 0);
return cnt == 3;
}
void dfs (int x, int y) {
vis[x][y] = true;
for (int i = 0; i < 4; i ++) {
int xx = x + dx[i], yy = y + dy[i];
if (xx >= 1 && xx <= r && yy >= 1 && yy <= c && !vis[xx][yy] && s[xx][yy] == '#') {
dfs (xx, yy);
}
}
}
int main () {
cin >> r >> c;
for (int i = 1; i <= r; i ++) {
cin >> (s[i] + 1);
}
for (int i = 1; i <= r; i ++) {
for (int j = 1; j <= c; j ++) {
if (chk (i, j)) return cout << "Bad placement.", 0;
}
}
for (int i = 1; i < r; i ++) {
for (int j = 1; j < c; j ++) {
if (!vis[i][j] && s[i][j] == '#') {
cnt ++;
dfs (i, j);
}
}
}
cout << "There are " << cnt << " ships.";
return 0;
}
就拿样例来说,本应该输出5但是本代码输出3。 而且可以通过本题,故要求加强数据。