173. 矩阵距离 题解

题目描述

avatar

解题思路

多源BFS 参考:https://www.acwing.com/solution/content/40236/

代码

cpp
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 1010;

int n, m, dist[N][N];
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
char g[N][N];

void bfs()
{
    queue<PII>q;
    memset(dist, -1, sizeof dist);
    
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            if (g[i][j] == '1')  // 先将是1的坐标全部加入队列
            {
                dist[i][j] = 0;
                q.push({i, j});
            }
            
    while (q.size())
    {
        auto t = q.front();
        q.pop();
        
        for (int i = 0; i < 4; i++)
        {
            int a = t.x + dx[i], b = t.y + dy[i];
            if (a < 0 || a >= n || b < 0 || b >= m) continue;
            if (dist[a][b] != -1)   continue;
            
            q.push({a, b});
            dist[a][b] = dist[t.x][t.y] + 1;
        }
    }
}

int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++) scanf("%s", g[i]);
    
    bfs();
    
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            printf("%d ", dist[i][j]);
        printf("\n");
    }
           
    return 0;
}
「LeetCode」1763. 最长的美好子字符串
1100. 抓住那头牛 题解
Valaxy v1.0.0-rc.3 驱动|主题-Yunv1.0.0-rc.3