奶牛选美

#include<bits/stdc++.h>
using namespace std;
const int N = 55;
typedef pair<int, int> PII;
char s[N][N];
bool t[N][N];
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int n, m;
#define x first
#define y second
vector<PII>a,b;
void bfs(PII st, bool tt)
{
    queue<PII> q;
    q.push(st);
    if(tt)a.push_back(st);
    else b.push_back(st);
    while(q.size())
    {
        PII bg = q.front();
        q.pop();
        for(int i = 0; i < 4; i ++)
        {
            int x = dx[i] + bg.x, y = dy[i] + bg.y;
            if(x <= n && x >= 1 &&  y <= m && y >= 1 && s[x][y] == 'X' && !t[x][y])
            {
                if(tt)a.push_back({x,y});
                else b.push_back({x,y});
                q.push({x,y}); 
                t[x][y] = true;
            }
        }
    }
}
int main()
{

    cin >> n >> m;
    for(int i = 1; i <= n; i ++)
    {
       for(int j = 1; j <= m; j ++)
       {
          cin >> s[i][j]; 
       }
    }
    bool tt = false;
    for(int i = 1; i <= n; i ++)
    {
        for(int j = 1; j <= m; j ++)
        {
            if(s[i][j] == 'X' && !t[i][j])
            {
                bfs({i,j}, tt);
                t[i][j] = true;
                tt = true;
            }

        }
    }
    int mi = 1000000;
    for(int i = 0; i < a.size(); i ++)
    {
        for(int j = 0; j < b.size(); j ++)
        {
            mi = min(mi, (int)abs(a[i].x - b[j].x) + abs(a[i].y - b[j].y) - 1);
        }
    }
    cout << mi <<endl;
}
全部评论

相关推荐

沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务