曼哈顿距离:菱形打印与路径规划

1 打印菱形

常规方法的核心思想是通过控制空格和星号(*)的数量来构造菱形的每一行。

  • 上半部分:逐行增加星号数量,减少空格数量。
  • 下半部分:逐行减少星号数量,增加空格数量。

1.2 图解

假设我们要打印一个边长为5的菱形:

    ****************
*************************
  • 第1行:4个空格 + 1个星号。
  • 第2行:3个空格 + 3个星号。
  • 第3行:2个空格 + 5个星号。
  • 第4行:1个空格 + 7个星号。
  • 第5行:0个空格 + 9个星号。
  • 第6行开始重复第4到第1行的过程。

1.3 实现代码(chat)

#include <iostream>
using namespace std;void printDiamond(int n) {// 打印上半部分for (int i = 1; i <= n; ++i) {// 打印空格for (int j = 1; j <= n - i; ++j) {cout << " ";}// 打印星号for (int j = 1; j <= 2 * i - 1; ++j) {cout << "*";}cout << endl;}// 打印下半部分for (int i = n - 1; i >= 1; --i) {// 打印空格for (int j = 1; j <= n - i; ++j) {cout << " ";}// 打印星号for (int j = 1; j <= 2 * i - 1; ++j) {cout << "*";}cout << endl;}
}int main() {int n;cout << "input:";cin >> n;printDiamond(n);return 0;
}

2 曼哈顿距离法打印菱形

曼哈顿距离法利用二维坐标系中的点到中心点的距离来判断是否打印星号。具体步骤如下:

  • 将菱形的中心设为原点 (0, 0)
  • 对于每个点 (x, y),如果其曼哈顿距离(即 ∣ x ∣ + ∣ y ∣ |x| + |y| x+y)小于等于给定的半径 r r r,则打印星号;否则打印空格。

曼哈顿距离公式为:
d = ∣ x ∣ + ∣ y ∣ d = |x| + |y| d=x+y

  • 中心点为 (0, 0)
  • 每个点的曼哈顿距离满足 ∣ x ∣ + ∣ y ∣ ≤ r |x| + |y| \leq r x+yr,其中 r = 4 r=4 r=4

cpp代码

#include <iostream>
using namespace std;
void solve(int n) {int r = n - 1; // 菱形的半径for (int y = -r; y <= r; ++y) {for (int x = -r; x <= r; ++x) {if (abs(x) + abs(y) <= r) {cout << "*";} else {cout << " ";}}cout << endl;}
}
int main() {int n;cin >> n;solve(n);return 0;
}
    ** **   **     *
*       **     **   ** **

打印空心菱形,只打印等于半径的位置即可。

#include <iostream>
using namespace std;
void solve(int n) {int r = n - 1; // 菱形的半径for (int y = -r; y <= r; ++y) {for (int x = -r; x == r; ++x) {if (abs(x) + abs(y) <= r) {cout << "*";} else {cout << " ";}}cout << endl;}
}
int main() {int n;cin >> n;solve(n);return 0;
}

3 一些场景

曼哈顿距离(Manhattan Distance)是计算二维平面中两点之间距离的一种方法,具体的定义如下:
d = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ d = |x_1 - x_2| + |y_1 - y_2| d=x1x2+y1y2

路径规划与网格图问题
曼哈顿距离常用于网格图中的路径规划问题,特别是在不允许斜向移动的情况下。例如:在一个 n × m n \times m n×m 的网格图中,每个格子可能有障碍物或空地。从起点到终点的最短路径是多少?

  • 使用BFS结合曼哈顿距离作为启发式函数。
  • 曼哈顿距离可以估算当前点到目标点的最小步数,从而优化搜索效率。

棋盘问题
在一个 n × n n \times n n×n 的棋盘上,骑士从起点移动到终点所需的最少步数是多少?

  • 使用 BFS 搜索所有可能的移动路径。
  • 曼哈顿距离可以作为启发式函数,估算当前点到目标点的距离,从而优化搜索方向。

城市配送问题

给定一个 n × n n \times n n×n 的网格图,某些格子上有货物需求,另一些格子上有配送中心。每个配送中心只能服务一定范围内的需求点。求所有需求点到最近配送中心的总曼哈顿距离。

#include <iostream>
#include <queue>
#include <vector>
using namespace std;const int INF = 1e9;
const int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int minTotalDeliveryDistance(int n, vector<pair<int, int>>& depots, vector<pair<int, int>>& demands) {vector<vector<int>> distance(n, vector<int>(n, INF));queue<pair<int, int>> q;for (auto& depot : depots) {int x = depot.first, y = depot.second;distance[x][y] = 0;q.push({x, y});}while (!q.empty()) {auto [x, y] = q.front();q.pop();for (int i = 0; i < 4; ++i) {int nx = x + dirs[i][0], ny = y + dirs[i][1];if (nx >= 0 && nx < n && ny >= 0 && ny < n && distance[nx][ny] > distance[x][y] + 1) {distance[nx][ny] = distance[x][y] + 1;q.push({nx, ny});}}}long long totalDistance = 0;for (auto& demand : demands) {int x = demand.first, y = demand.second;if (distance[x][y] == INF) return -1; // 如果无法到达totalDistance += distance[x][y];}return totalDistance;
}int main() {int n = 5;vector<pair<int, int>> depots = {{0, 0}, {4, 4}};vector<pair<int, int>> demands = {{2, 2}, {3, 3}};cout << "ret: " << minTotalDeliveryDistance(n, depots, demands) << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18033.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米 R3G 路由器刷机教程(Pandavan)

小米 R3G 路由器刷机教程&#xff08;Pandavan&#xff09; 一、前言 小米 R3G 路由器以其高性价比和稳定的性能备受用户青睐。然而&#xff0c;原厂固件的功能相对有限&#xff0c;难以满足高级用户的个性化需求。刷机不仅可以解锁路由器的潜能&#xff0c;还能通过第三方固…

【电脑】u盘重装win7

u盘必须8GB以上 1. CPU型号 首先查看CPU的型号看看到底能不能装win7 2. 下载光盘映像文件 网址 看电脑是多少位的机器(32位下载x86 64位下载x64) 一共是这么多个版本按需下载对应的版本 电脑小白推荐无脑下载旗舰版 将链接复制到迅雷进行下载 3. 下载软碟通 网址 下…

wps或office的word接入豆包API(VBA版本)

直接上代码&#xff0c;由于时间匆忙&#xff0c;以后写个详细的教程 #If VBA7 ThenPrivate Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As…

Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)

#想cry 好想cry 目录 1 全局唯一id 1.1 自增ID存在的问题 1.2 分布式ID的需求 1.3 分布式ID的实现方式 1.4 自定义分布式ID生成器&#xff08;示例&#xff09; 1.5 总结 2 优惠券秒杀接口实现 3 单体系统下一人多单超卖问题及解决方案 3.1 问题背景 3.2 超卖问题的…

USB Flash闪存驱动器安全分析(第一部分)

翻译原文链接&#xff1a;Hacking Some More Secure USB Flash Drives (Part I) | SySS Tech Blog 文章翻译总结&#xff1a;文章对一些具有AES硬件加密的USB闪存驱动器的网络安全分析研究。研究由SySS的IT安全专家Matthias Deeg进行&#xff0c;他在2022年初发现了几个安全漏…

[前端] axios网络请求二次封装

一、场景描述 为什么要对axios网络请求进行二次封装? 解决代码的复用&#xff0c;提高可维护性。 —这个有两个方案&#xff1a;一个是二次封装一个是实例化。&#xff08;设置一些公共的参数&#xff0c;然后进行请求&#xff09; 为什么可以解决代码的复用&#xff1a; 这是…

DeepSeek助力:打造属于你的GPTs智能AI助手

文章目录 一、环境准备1.安装必要的工具和库2. 选择合适的开发语言 二、核心技术选型1. 选择适合的AI框架 三、功能实现1. 文本生成与对话交互2. 代码生成与自动补全3. 数据分析与报告生成 四、案例实战1. 搭建一个简单的聊天机器人2. 创建一个代码生成器 五、总结与展望1. 当前…

网络基础 【UDP、TCP】

1.UDP 首先我们学习UDP和TCP协议 要从这三个问题入手 1.报头和有效载荷如何分离、有效载荷如何交付给上一层的协议&#xff1f;2.认识报头3.学习该协议周边的问题 UDP报头 UDP我们先从示意图来讲解&#xff0c;认识报头。 UDP协议首部有16位源端口号&#xff0c;16位目的端…

推荐的、好用的线性稳压器

前言 内容来自B站up主-工科男孙老师的视频 视频内容&#xff1a;测评网友推荐的线性稳压器&#xff0c;以及这些线性稳压器的应用场景。视频链接&#xff1a;除了1117&#xff0c;还有哪些更好用的线性稳压器&#xff1f; 1、1117的缺点 体积太大&#xff0c;浪费主板的空间不…

2025最新出炉--前端面试题九

文章目录 1. Vue 和 React 的使用经验对比2. vue 的 computed 和 watch 有什么区别3. v-model 平时你都怎么使用4. import 和 require 之间什么区别5. 说一下 vue 的缓存组件6. vue3.0 为什么使用 proxy 拦截数据7. 能讲讲 vuex 吗, 刷新页面会怎样8. http1.1 和 http2.0 之间什…

rancher on k3s

本次部署采用3节点的etcd服务2master节点的k3s使用helm部署的ranchervip(keepalived) 一、安装etcd服务 # 准备 3 个节点部署 etcd cd /hskj/tmp wget https://github.com/etcd-io/etcd/releases/download/v3.3.15/etcd-v3.3.15-linux-amd64.tar.gz tar xzvf etcd-v3.3.15-…

NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略

作者&#xff1a;来自 vivo 互联网算法团队- Huang Minghui 本文探讨了 NLLB 翻译模型与 ChatGPT 在小语种应用中的双向优化策略。首先介绍了 NLLB-200 的背景、数据、分词器和模型&#xff0c;以及其与 LLM&#xff08;Large Language Model&#xff09;的异同和协同关系。接着…

无人机图像拼接数据的可视化与制图技术:以植被监测为例

无人机技术在生态环境监测中的应用越来越广泛&#xff0c;尤其是在植被监测领域。通过无人机获取的高分辨率影像数据&#xff0c;结合GIS技术&#xff0c;可以实现对植被覆盖、生长状况等的精确监测与分析。本文将通过一个实际案例&#xff0c;详细讲解无人机图像拼接数据的可视…

ONES 功能上新|ONES Copilot、ONES TestCase、ONES Wiki 新功能一览

ONES Copilot 支持基于当前查看的工作项相关信息&#xff0c;利用 AI 模型&#xff0c;在系统中进行相似工作项的查找&#xff0c;包括基于已关联工作项的相似数据查找。 应用场景&#xff1a; 在查看工作项时&#xff0c;可利用 AI 模型&#xff0c;基于语义相似度&#xff0c…

基于带通滤波的camera脏污检测算法可以完全替代imatest

1.概要 脏污检测算法&#xff0c;基于opencv c实现&#xff0c;便于模组厂快速集成到软件工具中&#xff0c;适用于camera模组厂脏污拦截&#xff0c;特别是对浅脏污具备很好的定位效果&#xff1b;便于画质评价工程师了解camera模组制程的问题提出改善方向。 2.技术介绍 下图…

后勤数据源定制主控室

场景&#xff1a;在学习了解后勤数据源过程中&#xff0c;看到觉得有用的note&#xff0c;分享给大家。 1779063 - 常见问题&#xff1a;关于 LO 数据提取 - 定制主控室&#xff08;事务 LBWE&#xff09; 1.问题&#xff1a; 是否需要为每个应用程序组件下的每个数据源添加池…

云原生AI Agent应用安全防护方案最佳实践(上)

当下&#xff0c;AI Agent代理是一种全新的构建动态和复杂业务场景工作流的方式&#xff0c;利用大语言模型&#xff08;LLM&#xff09;作为推理引擎。这些Agent代理应用能够将复杂的自然语言查询任务分解为多个可执行步骤&#xff0c;并结合迭代反馈循环和自省机制&#xff0…

三格电子——TCP转ProfibusDP网关使用场景

型号&#xff1a; SG-TCP-Profibus(M) 感兴趣可以TB 搜 三格电子 使用场景&#xff1a; ModbusTCP Client 通过 ModbusTCP 控制 Profibus DP 接口设备。 ModbusTCP 侧支持03H、04H、10H 功能码&#xff0c;只支持 1 个client连接&#xff1b; ProfibusDP 侧支持 DP v0。 P…

剑指offer第2版:搜索算法(二分/DFS/BFS)

查找本质就是排除的过程&#xff0c;不外乎顺序查找、二分查找、哈希查找、二叉排序树查找、DFS/BFS查找 一、p39-JZ3 找出数组中重复的数字&#xff08;利用特性&#xff09; 数组中重复的数字_牛客题霸_牛客网 方法1&#xff1a;全部排序再进行逐个扫描找重复。 时间复杂…

小众宝藏分子生物学实验中常用的软件:InSequence

欢迎使用InSequence&#xff0c;正版免费使用&#xff0c;操作友好&#xff0c;小白也能轻松上手哦~ 1. 全新中文界面与更大操作空间 全中文简洁直观的操作界面&#xff0c;常用功能固定至工具栏&#xff0c;随心自定义更改工具栏&#xff0c;让科研人员能够更快速地上手&…