LeetCode题解(1334):阈值距离内邻居最少的城市(Python)

本文介绍了一种解决城市间最短路径问题的算法,利用广度优先搜索(BFS)或深度优先搜索(DFS)来找到使得任意两城市间的最远距离不超过给定阈值的最小城市数。在给定的城市数量、边和距离阈值的情况下,通过构建图并遍历所有可能的起始城市,找到使经过的城市数量最少的那个城市作为答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:原题链接(中等)

标签:图、广度优先搜索、深度优先搜索

解法时间复杂度空间复杂度执行用时
Ans 1 (Python) O ( N × E ) O(N×E) O(N×E) O ( N + E ) O(N+E) O(N+E)912ms (37.33%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:
    def findTheCity(self, n: int, edges: List[List[int]], distanceThreshold: int) -> int:
        graph = collections.defaultdict(dict)
        for edge in edges:
            graph[edge[0]][edge[1]] = edge[2]
            graph[edge[1]][edge[0]] = edge[2]

        ans_idx, ans_val = -1, n
        for city in range(n):
            visited = collections.Counter({city: 0})
            queue = collections.deque([(city, 0)])
            while queue:
                for _ in range(len(queue)):
                    city1, d1 = queue.popleft()
                    for city2 in graph[city1]:
                        d2 = d1 + graph[city1][city2]
                        if d2 <= distanceThreshold and (city2 not in visited or d2 < visited[city2]):
                            queue.append((city2, d2))
                            visited[city2] = d2
            if len(visited) <= ans_val:
                ans_idx, ans_val = city, len(visited)

        return ans_idx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值