You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为含50个随机笛卡尔坐标节点的完全图分配欧氏距离边权

生成带欧氏距离权重的50节点完全图

你已经搭好了50节点完全图的基础框架,我来帮你把欧氏距离作为边权重的部分补全。先把你已有的代码整理下(顺手补了import random,不然运行会报错哦):

import random

n = 50
V = range(n)  # 这里可以直接写成V = range(n),不用先初始化空列表
random.seed()
# 用字典存储每个节点的笛卡尔坐标
pos = {i: (random.randint(0, 500), random.randint(0, 500)) for i in V}

接下来要给完全图的每条边分配欧氏距离权重,完全图里每两个不同节点间都有一条边,我们可以用字典来存储边的权重(键为节点对,值为对应距离),下面给你两种实现方式:

方式一:直观循环计算

用嵌套循环遍历所有节点对,借助math.hypot快速计算平面两点的欧氏距离:

import math

# 存储边权重的字典,只存储(i,j)且i<j的情况,避免重复计算
edge_weights = {}

for i in V:
    for j in V:
        if i < j:  # 保证每对节点只计算一次
            x1, y1 = pos[i]
            x2, y2 = pos[j]
            # 计算欧氏距离
            distance = math.hypot(x2 - x1, y2 - y1)
            edge_weights[(i, j)] = distance

方式二:简洁推导式写法

如果喜欢更紧凑的代码,用字典推导式一行搞定:

import math

edge_weights = {
    (i, j): math.hypot(pos[j][0] - pos[i][0], pos[j][1] - pos[i][1])
    for i in V
    for j in V
    if i < j
}

另外,你之前写的points和positions列表其实不用循环生成,直接用字典的方法就能快速获取:

points = list(pos.values())  # 所有节点的坐标列表
positions = list(pos.keys())  # 所有节点的索引列表

这样整个完全图的节点坐标和边权重就都搞定啦~

内容的提问来源于stack exchange,提问作者ccc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:45:54