计算距离矩阵的方法_距离矩阵计算

计算距离矩阵的方法_距离矩阵计算给定一个 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]=1dist(A[i][j],A[x][y])输入格式第一行两个整数 N,M。接下来一个 N 行 M 列的 01 矩阵,数字之间没有空格。输出格式一个 N 行 M 列的矩阵 B,相邻两个整数之间用一个空格隔开。数据范围

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定一个 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]=1dist(A[i][j],A[x][y])
输入格式
第一行两个整数 N,M。

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

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

数据范围
1≤N,M≤1000

输入样例:
3 4
0001
0011
0110
输出样例:
3 2 1 0
2 1 0 0
1 0 0 1
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N = 1e3 + 10;
typedef pair<int,int>PII;
int g[N][N],vis[N][N],dist[N][N];
struct Node{ 
   
    int x,y;
    int d;
}node[N];
queue<PII>q;
int n,m;
void bfs(){ 
   
    for(int i = 0;i < n;i ++){ 
   
        for(int j = 0;j < m;j ++){ 
   
            if(g[i][j] == 1){ 
   
                vis[i][j] = true;
                dist[i][j] = 0;
                q.push({ 
   i,j});
            }
        }
    }
    int dx[4] = { 
   0,1,0,-1},dy[4] = { 
   -1,0,1,0};
    while(!q.empty()){ 
   
        PII t = q.front();
        q.pop();
        for(int k = 0;k < 4;k ++){ 
   
            int a = t.x + dx[k],b = t.y + dy[k];
            if(a < 0 || a >= n || b < 0 || b >= m || vis[a][b])continue;
            vis[a][b] = true;
            dist[a][b] = dist[t.x][t.y] + 1;
            q.push({ 
   a,b});
        }
    }
    for(int i = 0;i < n;i ++){ 
   
        cout<<dist[i][0];
        for(int j = 1;j < m;j ++){ 
   
            cout<<" "<<dist[i][j];
        }
        cout<<endl;
    }
}
int main(){ 
   
    cin>>n>>m;
    char x;
    for(int i = 0;i < n;i ++){ 
   
        for(int j = 0;j < m;j ++)cin>>x,g[i][j] = x - '0';
    }
    bfs();
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168832.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 小米9刷面具和模块[通俗易懂]

    小米9刷面具和模块[通俗易懂]准备工作:没解BL锁的需要先解锁1.按住音量键下和关机键进入Fastboot模式连接电脑2.这里使用奇兔刷机连接手机,中途会自动安装驱动,若安装驱动失败可使用驱动精灵或驱动人生手动安装驱动.安装完驱动后奇兔刷机会显示已经连接到手机开启root:1.下载twrphttps://twrp.me/xiaomi/xiaomimi9.html2.1.把Magisk-v20.4.zip和magisk-taichi

    2022年6月4日
    113
  • SpringBoot+Mybatis实现分页查询[通俗易懂]

    SpringBoot+Mybatis实现分页查询[通俗易懂]文章目录前言1.引入依赖2.Mapper中接口3.修改XML文件4.controller层调用接口5.测试总结前言分页查询是在web开发中常用的一种技术,当某个页面查询返回的数据量较大时,为了提高性能和用户体验不能将所有数据一次性返回给过前端,这时候就需要用到分页查询了PageHelper是一款开源的Mybatis第三方物理分页插件,springboot项目中集成PageHelper插件非…

    2022年5月5日
    43
  • python中的静态方法和类方法

    python中的静态方法和类方法

    2021年11月19日
    47
  • UML图绘制—–时序图的画法

    UML图绘制—–时序图的画法UML图绘制—–时序图的画法1.什么是时序图时序图用于描述对象之间的传递消息的时间顺序,即用例中的行为顺序主要用来更直观的表现各个对象交互的时间顺序,将体现的重点放在以时间为参照,各个对象发送、接收消息,处理消息,返回消息的时间流程顺序,也称为时序图。又名序列图、循序图、顺序图,是一种UML交互图2.时序图的作用:确认和丰富一个使用情境的逻辑。3.时序图…

    2022年6月15日
    41
  • cJSON 使用详解

    cJSON 使用详解由于c语言中,没有直接的字典,字符串数组等数据结构,所以要借助结构体定义,处理json。如果有对应的数据结构就方便一些,如python中用json.loads(json)就把json字符串转变为内建的数据结构处理起来比较方便。一个重要概念:在cjson中,json对象可以是json,可以是字符串,可以是数字。。。cjson数据结构定义:#d…

    2022年6月15日
    69
  • 使用内存盘加快开发效率 (UltraRAMDisk,Jetbrains Idea,java)

    使用内存盘加快开发效率 (UltraRAMDisk,Jetbrains Idea,java)环境:Windows1020H2IntelliJIDEA2020.2.4x64JDK1.8内存盘软件:内存盘软件ultraramdisk官方地址CSDN资源链接://TODO硬件:i797001TB机械盘ddr426668G*2步骤0:内存大小根据实际内存去分配合理的大小动态分配内存根据需要备份和恢复根据自身需要,(关机速度会很慢内存盘内所有数据会写入到该镜像文件内)步骤1:我这边是选择直接将已有的idea软件…

    2022年5月7日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号