社区讨论
为啥错那多? 思路是参考题解的
P1331海战参与者 6已保存回复 13
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @mi8600wd
- 此快照首次捕获于
- 2025/11/21 09:11 4 个月前
- 此快照最后确认于
- 2025/11/21 09:47 4 个月前
#include
int map[1200][1200];
int a, b;
int ans = 0;
bool work (int i, int j) {
int temp = 0;
if (map[i][j] == 1) temp++;
if (map[i + 1][j] == 1) temp++;
if (map[i + 1][j + 1] == 1) temp++;
if (map[i][j + 1] == 1) temp++;
if (temp == 3) return true;
return false;
}
int dx[4] = {0, 1, -1, 0};
int dy[4] = {1, 0, 0, -1};
bool flag = true;
void DFS (int m, int n) {
map[m][n] = 2;
for (int i = 0; i < 4; i++) {
int tm = m + dx[i];
int tn = n + dy[i];
if (tm >= 0 && tn >= 0 && tm < a && tn < b)
if (map[tm][tn] == 1)
DFS (tm, tn);
}
}
int main()
{
char tmp;
scanf ("%d%d", &a, &b);//!!!
for (int i = 0; i < a; i++)
{
getchar ();
for (int j = 0; j < b; j++)
{
scanf ("%c", &tmp);
if (tmp == '.') map[i][j] = 0;
else map[i][j] = 1;
}
}
// for (int i = 0; i < a; i++)
// {
// for (int j = 0; j < b; j++)
// {
// printf ("%d", map[i][j]);
// }
// putchar ('\n');
// }
CPPfor (int i = 0; i < a - 1; i++)
{
for (int j = 0; j < b - 1; j++)
{
if (work (i, j))
{
printf ("Bad placement.");
return 0;
}
}
}
for (int i = 0; i < a; i++)
{
for (int j = 0 ; j < b; j++)
{
if (map[i][j] == 1)
{
DFS (i, j);
ans++;
}
}
}
printf ("There are %d ships.", ans);
}
回复
共 13 条回复,欢迎继续交流。
正在加载回复...