当前位置: 首页 > news >正文

1334. 阈值距离内邻居最少的城市

分析题目两点“阈值距离”、“邻居最少”。
“阈值距离”相当于定了个上界,求节点之间的最短距离。
“邻居最少”相当于能连接的点的数量。
求节点之间的最短距离有以下几种方法:
在这里插入图片描述
在这道题当中,n的范围是100以内,所以可以考虑O(n^3)的复杂度的算法
如果使用朴素Dijkstra算法,遍历所有点的算法复杂度为O(n*n^2)
如果使用堆优化版的Dijkstra算法,m=n^2,还不如朴素Dijkstra算法。
因此可以使用Floyd算法。
大致思路就是:先初始化一个最短距离矩阵d,然后每个节点一次遍历,对d值进行更新。
在这道题中,使用Floyd算法找到每个节点到其他节点的最短路径,然后遍历每个节点,找到在阈值距离内且可连接点数最少的节点。

class Solution {
public:int findTheCity(int n, vector<vector<int>>& edges, int distanceThreshold) {vector<vector<int>> d(n, vector<int>(n, 1e8));	// 这里的边值最大为1e4for (int i = 0; i < n; i++) d[i][i] = 0;for (auto v: edges) {int a = v[0], b = v[1], w = v[2];d[a][b] = d[b][a] = min(d[a][b], w);	// 注意这里对边值的初始化要去最小值}for (int k = 0; k < n; k++) {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {d[i][j] = min(d[i][j], d[i][k] + d[k][j]);}}}int res = -1, min_cnt = n + 1;	// 初始下标和初始最小连接节点个数for (int i = 0; i < n; i++) {int cnt = 0;for (int j = 0; j < n; j++) {if (i != j && d[i][j] <= distanceThreshold) {cnt++;}}if (cnt <= min_cnt) {min_cnt = cnt;res = i;}}return res;}
};
http://www.lryc.cn/news/230368.html

相关文章:

  • Live800:客服行业的发展历程及未来前景
  • exsi的安装和配置
  • 基于springboot实现校园医疗保险管理系统【项目源码】
  • Python 如何实现组合(Composite)设计模式?什么是组合设计模式?
  • 编辑器vim和编译器gcc/g++
  • linux 系统下文本编辑常用的命令
  • 3D Gaussian Splatting文件的压缩【3D高斯泼溅】
  • Spring Boot 整合xxl-job实现分布式定时任务
  • 16.最接近的三数之和
  • php 插入排序算法实现
  • import gradio时出现SyntaxError: future feature annotations is not defined解决方案
  • 视频封装格式
  • vue+iView实现下载zip文件导出多个excel表格
  • Rust编程中的共享状态并发执行
  • python语法之数据类型
  • Skybox天空盒子的更换教程_unity基础开发教程
  • Android模拟器的linux内核源码的下载
  • Vue中methods实现原理
  • 维基百科是非营利性机构 词条内容具有中立性、准确性、可靠性
  • C/C++轻量级并发TCP服务器框架Zinx-框架开发002: 定义通道抽象类
  • bin、hex、ELF文件格式上的区别
  • 《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)
  • 【分布式】CAP理论详解
  • AI歌姬,C位出道,基于PaddleHub/Diffsinger实现音频歌声合成操作(Python3.10)
  • ZooKeeper基本知识
  • leetcode:138. 随机链表的复制
  • SpringBoot 全局异常之参数校验(1)
  • QT windows与linux之间sokcet通信中文乱码问题解决方法
  • Java实现DXF文件转换成PDF
  • 揭秘Vue中的nextTick:异步更新队列背后的技术原理大揭秘!