测试点1 输出8156对的呀,为什么0分
查看原帖
测试点1 输出8156对的呀,为什么0分
1424262
tttfred楼主2024/11/5 08:54
#include <bits/stdc++.h>
using namespace std;
int n, m;
void dfs(vector<vector<int>> &s, vector<vector<int>> &b, int sx, int sy)
{
    int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
    b[sx][sy] = 2;
    for (int i = 0; i < 4; i++)
    {
        int tx = sx + dir[i][0];
        int ty = sy + dir[i][1];
        if (tx >= 1 &&  tx <= n &&ty >= 1 && ty <= m && b[tx][ty]==0 && s[tx][ty]==0)
        {
            b[tx][ty] = 2;
            dfs(s, b, tx, ty);
        }
    }
}
int main()
{
    
    cin >> n >> m;
    vector<vector<int>> s(n + 1, vector<int>(m + 1, 0));
    vector<vector<int>> b(n + 1, vector<int>(m + 1, 0));
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            char ch;
            ch = getchar();
            while (ch == ' ' || ch == '\n')
            {
                ch = getchar();
            }
            if (ch == '0')
            {
                s[i][j] = 0;
            }
            else if (ch == '*')
            {
                s[i][j] = 1;
            }
        }
    }
    for (int i = 1; i <= m; i++)
    {
        if (s[1][i]==0)
            dfs(s, b, 1, i);
        if (s[n][i]==0)
            dfs(s, b, n, i);
    }
    for (int j = 1; j <= n; j++)
    {
        if (s[j][1]==0)
            dfs(s, b, j, 1);
        if (s[j][m]==0)
            dfs(s, b, j, m);
    }
int cnt=0;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {if(b[i][j]==0&&s[i][j]==0)
           cnt++;
        }
    }
     cout<<cnt;
     
}
2024/11/5 08:54
加载中...