洛谷 U311289 矩阵距离

题目描述

给定一个 N 行 M 列的 01 矩阵 A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为:

dist(A[i][j],A[k][l])=∣i−k∣+∣j−l∣

输出一个 N 行 M 列的整数矩阵 B,其中:

B[i][j]=min1≤x≤N,1≤y≤M,A[x][y]=1​⁡dist(A[i][j],A[x][y])

输入格式

第一行两个整数 N,M。

接下来一个 N 行 M 列的 01 矩阵,数字之间没有空格。

输出格式

一个 N 行 M 列的矩阵 B,相邻两个整数之间用一个空格隔开。

输入输出样例

输入 #1复制

复制代码
3 4
0001
0011
0110

输出 #1复制

复制代码
3 2 1 0
2 1 0 0
1 0 0 1

说明/提示

1≤N,M≤1000

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
char arr[N][N];
int n,m;
int dist[N][N];
typedef pair<int,int> PII;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
void bfs()
{
    memset(dist,-1,sizeof dist);
    queue<PII> q;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(arr[i][j]=='1')
            {
                dist[i][j]=0;
                q.push({i,j});
            }
        }
    }
    while(q.size())
    {
        auto t = q.front();
        q.pop();
        int k=t.first;
        int z=t.second;
        for(int i=0;i<4;i++)
        {
            int x=k+dx[i];
            int y=z+dy[i];
            if(x>=1&&x<=n&&y>=1&&y<=m&&dist[x][y]==-1)
            {
                dist[x][y]=dist[k][z]+1;
                q.push({x,y});
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>arr[i][j];
        }
    }

    bfs();

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cout<<dist[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
相关推荐
执风挽^12 分钟前
Python基础编程题2
开发语言·python·算法·visual studio code
Z9fish21 分钟前
sse哈工大C语言编程练习20
c语言·开发语言·算法
晓131327 分钟前
第六章 【C语言篇:结构体&位运算】 结构体、位运算全面解析
c语言·算法
iAkuya33 分钟前
(leetcode)力扣100 61分割回文串(回溯,动归)
算法·leetcode·职场和发展
梵刹古音35 分钟前
【C语言】 指针与数据结构操作
c语言·数据结构·算法
VT.馒头41 分钟前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript
CoderCodingNo2 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法
大闲在人2 小时前
7. 供应链与制造过程术语:“周期时间”
算法·供应链管理·智能制造·工业工程
小熳芋2 小时前
443. 压缩字符串-python-双指针
算法
Charlie_lll3 小时前
力扣解题-移动零
后端·算法·leetcode