曼哈顿距离

定义

出租车几何或曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。
两点在南北方向上的距离加上在东西方向上的距离d(i,j)=|X1-X2|+|Y1-Y2|

数学性质

  1. 非负性:d(i,j)≥0 距离是一个非负的数值
  2. 同一性:d(i,i)= 0 对象到自身的距离为0
  3. 对称性:d(i,j)= d(j,i)距离是一个对称函数
  4. 三角不等式:d(i,j)≤d(i,k)+d(k,j)从对象i到对象j的直接距离不会大于途经的任何其余对象k的距离

曼哈顿距离解决什么问题呢?

曼哈顿距离可以代替一个广搜,不过这个广搜是有条件限制的:
①只能上、下、左、右四个方向进行移动(很多迷宫问题其实都有这个特性)
②只求两点之间最短路径的长度不求路径过程

例如

Description

在一个 N 行 M 列的字符网格上, 恰好有 2 个彼此分开的连通块。每个连通 块的一个格点与它的上、下、左、右的格子连通。如下图所示:

现在要把这 2 个连通块连通, 求最少需要把几个’.’转变成’X’。上图的例子中, 最少只需要把 3个’.’转变成’X’。下图用’*’表示转化为’X’的格点。

Input

第 1 行:2 个整数 N 和 M(1<=N,M<=50) 接下来 N 行,每行 M 个字符, ’X’表示属于某个连通块的格点,’.’表示不属于某 个连通块的格点

Output

第 1 行:1 个整数,表示最少需要把几个’.’转变成’X’

Sample Input

6 16

…XXXX…XXX…
…XXXX…XX…
.XXXX…XXX…
…XXXXX…
…XXX…

Sample Output

3

有两种解法,一种是先用 DFS 把两个联通块区分开来,然后用 BFS求最短距离。另一种就是笔者要讲的 DFS + 曼哈顿距离

代码如下

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=50;
char g[N][N];
struct Node
{int x,y;
}Edge;vector<Node> dist[2];int n,m,cnt;int dx[]={0,1,0,-1},dy[]={1,0,-1,0};void dfs(int a,int b)
{g[a][b] = '.';  //避免重复搜索Edge.x = a;Edge.y = b;dist[cnt].push_back(Edge);for(int i=0;i<4;i++){int x = a + dx[i];int y = b + dy[i];if(x >= 0 && y >= 0 && x < n && y < m && g[x][y] == 'X')dfs(x, y);}
}int main()
{scanf("%d%d",&n,&m);for(int i=0;i<n;i++)scanf("%s",g[i]);cnt=0; for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(g[i][j] == 'X')  //搜到一个连通块{dfs(i,j);cnt ++;}int ans = 0x3f3f3f3f;for(int i=0;i<dist[0].size();i++){for(int j=0;j<dist[1].size();j++){ans = min(ans, abs(dist[0][i].x - dist[1][j].x) + abs(dist[0][i].y - dist[1][j].y) - 1);}}printf("%d\n",ans);return 0;
}

再来一道娱乐题
菱形

输入一个奇数 n,输出一个由 * 构成的 n 阶实心菱形。

输入格式

一个奇数 n。

输出格式

输出一个由 * 构成的 n 阶实心菱形。
具体格式参照输出样例。

数据范围

1≤n≤99

输入样例:

5

输出样例:

#include <iostream>
#include <algorithm>using namespace std;int main()
{int n;cin >> n;int sx = n / 2, sy = n / 2;for (int i = 0; i < n ; i ++ ){for (int j = 0; j < n; j ++ ){if ( abs(sx - i) + abs(sy - j) <= n / 2 ) cout << "*";else cout << " ";}cout << endl;    }return 0;
}

欢迎点赞与评论~
记得收藏

曼哈顿距离(值得收藏)相关推荐

  1. 总结了 200 道 BAT 机器学习面试题,值得收藏 (附参考答案)

    刷题,是面试前的必备环节.本文作者总结了往年BAT机器学习面试题,干货满满,值得收藏. 想要入职大厂可谓是千军万马过独木桥.为了通过层层考验,刷题肯定是必不可少的.本文作者根据网络在线发布的BAT机器 ...

  2. 值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(下)

    作者 | 黄浴 来源 | 转载自知乎专栏自动驾驶的挑战和发展 [导读]在近日发布的<值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(上)>一文中,作者介绍了一部分各大公司和机构基于 ...

  3. 曼哈顿距离最小生成树莫队算法

    参考资料:https://www.cnblogs.com/CsOH/p/5904430.html https://blog.csdn.net/huzecong/article/details/8576 ...

  4. 51nod 1213 二维曼哈顿距离最小生成树

    1213 二维曼哈顿距离最小生成树 基准时间限制:4 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 二维平面上有N个坐标为整数的点,点x1 y1同点x2 y2之间 ...

  5. c语言15-puzzle解法,15 Puzzle (4乘4谜题) IDA*(DFS策略与曼哈顿距离启发) 的C语言实现...

    大家好!这是我的第一篇博客,由于之前没有撰写博客的经验,并且也是初入计算机和人工智能领域,可能有些表述或者理解不当,还请大家多多指教. 一.撰写目的 由于这个学期在上算法与数据结构课程的时候,其中一个 ...

  6. cad指北针lisp_房建工程施工图常用符号及图例(值得收藏)

    房建工程施工图常用符号及图例(值得收藏) 房屋的建造一般需经设计和施工两个过程,设计工作又分为初步设计和施工图设计阶段.但对一些技术上复杂而又缺乏设计经验的工程,还应在初步设计基础上增加技术设计(或称 ...

  7. 值得收藏——一文让你读懂人脸识别技术

    2019-01-25 13:16:12 近日,人脸识别技术因多次在抓逃犯的过程中"立功",再度走"红".从20世纪60年代起,人脸识别研究开启,发展到今天有哪些 ...

  8. 玩转Python必备:史上最全的Python库,【值得收藏,事半功倍】

    库名称     简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器 ...

  9. 模具设计整套制造中所需注意细节,值得收藏

    模具设计整套制造中所需注意细节,值得收藏 制造一套好的模具,不仅要有好的模具设计水平和精密的加工工艺,还离不开"标准",不允许"差不多"概念的存在.本文列举了一 ...

最新文章

  1. 华裔教授教你写论文2.引言的逻辑解析
  2. BigDecimal 使用详解
  3. opengl 预览摄像头
  4. Matplotlib实例教程 | 句子长度累积分布函数图
  5. 【详解】某企业的培训关系模式 R(培训科目,培训师,学生,成绩,时间,教室), R的函数依赖集 F={培训科目→→培训师,(学生,培训科目)→成绩,(时间,教室)→培训科目,(时间,培训师)→
  6. jQuery/javascript实现简单网页计算器
  7. topcoder SRM712 Div1 LR
  8. Sys.WORD_SIZE Julia中的常量
  9. Ps和Sai文件自动保存,自动备份
  10. vivado实现cameralink接口
  11. Linux + ChromiumOS操作系统资源持续更新...(转载)
  12. 乐动手环app下载安装_乐动健康下载app_新版本手机乐动健康手环软件下载安装 安卓版 V2.08 - 罐头安卓网...
  13. uni-app 解决富文本图片溢出问题
  14. 操作BLOB、CLOB、BFILE
  15. JavaScript中常用数组方法总结
  16. C语言读写中文时出现乱码的解决
  17. js正则验证人名,包含· | 手机号正则验证(199)
  18. 服务器上数据库连接超时问题
  19. 光耦,磁耦,容耦的区别
  20. 2021年广东省雷州市客路镇高考成绩查询,雷州市客路镇隆重召开庆祝第31个教师节暨表彰大会...

热门文章

  1. 第二证券|医药板块短期轮动加快 机构看好后市机会
  2. 计算机无法预览文件,SolidWorks文件不能预览的解决方法 | 我爱分享网
  3. 2022G3锅炉水处理特种作业证考试题库及答案
  4. 在nsa组网架构中,3gpp定义的nr与epc的接口是什么
  5. 魂系列联机服务器,黑暗之魂3 联机图文教程 新手联机指南 正版怎么联机_3DM单机...
  6. 2022-08-09 mysql/stonedb-慢SQL-Q16分析
  7. 新博立,存此证-关于可用性的理解
  8. 西安临潼秦始皇陵、地宫、八大奇迹馆、骊山一日游
  9. erp沙盘采购总监的心得_erp沙盘模拟实验采购总监个人总结
  10. oracle 查看锁表 清除锁表