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

计算距离矩阵的方法_距离矩阵计算给定一个 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)
上一篇 2022年8月9日 上午11:36
下一篇 2022年8月9日 上午11:36


相关推荐

  • OJ平台汇总

    OJ平台汇总leetcode:https://leetcode.com/提交错误能够给出错误的数据,比较好调试。浙江大学OnlineJudge(ZOJ):http://acm.zju.edu.cn/国内最早也是最有名气的OJ,打开速度快。北京大学OnlineJudge(POJ):http://acm.pku.edu.cn/JudgeOnline/举行在线比赛比较多,数据比ZOJ上的

    2022年6月16日
    37
  • 怎么开启小米Note 3的root超级权限

    怎么开启小米Note 3的root超级权限小米 Note3 有没有办法获得 Root 权限 我们都知道 android 设备有 Root 权限 一旦手机获得 root 相关权限 就能够实现更好的功能 举个栗子我们单位的营销部门的妹纸 使用一些营销工具都需要在 Root 权限下工作 如果手机无能获的 root 的权限 就没办法正常使用相关的功能 小米 Note3 开发版系统版本本身拥有 root 权限管理工具 但是如果你使用的是小米 Note3 稳定版 建议可以先将小

    2026年3月17日
    2
  • 大数据时代下的人工智能医疗应用_大数据下的人工智能

    大数据时代下的人工智能医疗应用_大数据下的人工智能大数据时代下的人工智能医疗十问十答-陆讯1、怎么理解大数据时代下的人工智能健康医疗?2、智能医疗相比于传统医疗有什么优势和劣势吗?3、国内外人工智能医疗的知名公司(医院)有哪些?4、人工智能在医疗领域有哪些应用场景?处在阶段?5、人工智能医疗如何保障用户的安全问题?6、人工智能医疗行业的产品经理从业方向都有哪些?7、如何成为一名合格的人工智能医疗产品经理?8、您所负责过的人工智能医疗产品都是怎样的?9、5G会怎样影响智能医疗行业的发展?10、医疗行业智能化的未来会是什么样?Q1.怎

    2026年1月23日
    5
  • 一篇教会你写90%的shell脚本_flash动画脚本怎么写

    一篇教会你写90%的shell脚本_flash动画脚本怎么写如果将运维比作手链,将珍珠比作服务,那么将珍珠串起来的线就是Shell,作为实现Linux系统自动管理以及自动化运维所必备的Shell脚本,其重要性便不言而喻。每一位合格的Linux系统管理员或运维工程师,都应该将熟练编写Shell脚本视为基本技能之一,只有这样才能减少不必要的劳动。但是新人在编写脚本时却只会:#!/bin/bash,所以今天就给大家分享100个经典实用的脚本范例,手把手教你写Shell脚本。这100个脚本范例从基础到进阶均涵盖,有侧重地提高编写能力,结构清晰准确,PDF格式,可

    2022年10月3日
    4
  • 数据库主键和外键的区别

    数据库主键和外键的区别什么是主键 外键关系型数据库中的一条记录中有若干个属性 若其中某一个属性组 注意是组 能唯一标识一条记录 该属性组就可以成为一个主键 nbsp 比如 nbsp nbsp 学生表 学号 姓名 性别 班级 nbsp 其中每个学生的学号是唯一的 学号就是一个主键 nbsp 课程表 课程编号 课程名 学分 nbsp 其中课程编号是唯一的 课程编号就是一个主键 nbsp 成绩表 学号 课程号 成绩 nbsp 成绩表中单一一个属性无法唯一标识一

    2026年3月18日
    2
  • 开心网教父外挂「建议收藏」

    开心网教父外挂「建议收藏」-实现定时执行任务,打开最小化到托盘,让这个小东西帮你自动打工赚钱吧,哈哈!欢迎使用,如果有好的建议请相互交流一下。后续会加入等多功能。下载29738673@qq.com新增自动火拼和自动追杀令功能!淘宝完整版注:需安装.net2.0运行环境,微软官方下载开心网教父验证码版只要5元,淘宝地址…

    2025年11月7日
    5

发表回复

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

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