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

计算距离矩阵的方法_矩阵的欧式距离给定一个 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/168643.html原文链接:https://javaforall.net

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


相关推荐

  • DSP CCS软件仿真

    以前的学习和工作没有使用过DSPCCS软件仿真,一般都是VC仿真好了直接移植到DSP进行硬件仿真的,最近帮别人调试一个程序,别人用的是软件仿真,自己也要用软件仿真来帮忙调试,因此就将这一过程记录下来了,以备以后查看。1设置CCS      打开CCSSetup,在Family中选择CPU系列,这里选择C64xx,Platform选择simulator(软件仿真),在Available

    2022年4月6日
    804
  • js 字符串截取slice、substring、substr

    js 字符串截取slice、substring、substr1、slice//slice()方法用于从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)。’JavaScript’.slice(0,4)//”Java”//如果省略第二个参数,则表示子字符串一直到原字符串结束。’JavaScript’.slice(4)//”Script”//如果参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度。’JavaScript’.slice(-6)//”S

    2022年5月27日
    54
  • 第二:Pycharm设置配置(非常详细)「建议收藏」

    第二:Pycharm设置配置(非常详细)「建议收藏」1、汉化:把resources_zh.jar拷贝到PyCharm的安装目录下的lib目录,重启Pycharm即可。(resources_zh.jar汉化包关注本账号获取:链接:https://pan.baidu.com/s/1JCpTloWnQdQ8ShsUt-Qabg提取码:i7pu)如果打开后显示乱码,请先删除resources_cn.jar,然后打开pycharm2017,在菜单上依次选择File->Settings->Appearance&Behavior

    2022年8月25日
    8
  • 计算机能不能升级固态硬盘,老电脑升级固态硬盘真的能变快吗?「建议收藏」

    计算机能不能升级固态硬盘,老电脑升级固态硬盘真的能变快吗?「建议收藏」怎样去DIY一台主机呢?它可以满足自己的工作、游戏需求,还要颜值高、噪音小、最重要的是价格要便宜,质量要好。本系列为让装机零基础的朋友可以轻松了解,所以尽量避免专业参数。(每周二更新)老电脑升级固态硬盘是第一选择,然而很多同学购买了固态硬盘,却发现没有想象的那么快,用测速工具测试后发现读写速度不能达到标称,是买到假货了吗?其实不然,固态硬盘读写速度受很多因素影响,本期《装机不求人》就和大家讲解…

    2022年6月6日
    39
  • python-练习实现猜数字的循环

    python-练习实现猜数字的循环

    2022年3月2日
    37
  • 数据库删除语句[通俗易懂]

    数据库删除语句[通俗易懂]Delete:删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行)。删除某一行:Deletefrom数据表名称where列名称=值;删除所有行:Delete*from数据表名称Drop:删除数据表或数据库,或删除数据表字段。删除数据库:dropdatabase数据库名称删除数据表:(表的结构、属性、索引也会被删除)

    2025年8月19日
    4

发表回复

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

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