社区讨论

为啥错那多? 思路是参考题解的

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'); // }
CPP
for (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 条回复,欢迎继续交流。

正在加载回复...