第一个样例过不去,我尝试 直接输出 Bad placement. 第一个样例就过了 实在找不到逻辑问题了 求大佬帮忙看看有什么问题
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1005;
int n, m;
string grid[N];
bool st[N][N];
int res;
int maxi, maxj;
int md[][4] = { {0,1,0,-1},{1,0,-1,0} };
void bfs(int a, int b)
{
st[a][b] = true;
queue<pair<int, int>> mq;
mq.push({ a,b });
maxi = max(maxi, a);
maxj = max(maxj, b);
while (mq.size())
{
auto t = mq.front();
mq.pop();
for (int i = 0; i < 4; i++)
{
int j = t.first + md[0][i];
int k = t.second + md[1][i];
if (j >= 0 && j < n && k >= 0 && k < m)
{
if (st[j][k] == false && grid[j][k] == '#')
{
st[j][k] = true;
mq.push({ j,k });
maxi = max(maxi, j);
maxj = max(maxj, k);
}
}
}
}
}
bool check(int x, int y, int a, int b)
{
for (int i = x; i <= a; i++)
for (int j = y; j <= b; j++)
if (grid[i][j] == '.')return true;
return false;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
string s;
cin >> grid[i];
}
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (st[i][j] == false && grid[i][j] == '#')
{
maxi = maxj = 0;
res++;
bfs(i, j);
if (check(i, j, maxi, maxj))
{
cout << "Bad placement." << endl;
return 0;
}
}
}
cout << "There are " << res << " ships." << endl;
}