最短路问题求解 | Python+Gurobi-COPT-SCIP

3天干完6个月的活,Claude把模型搬上AMD 一条挺刺激的消息:Anthropic 给投资人的材料里有一张幻灯片,写着它的 Claude Mythos Preview 只花了大约​,就摸清了怎么让另一个 Claude 模型在 AMD 的 MI355X 上跑起来。同一处还写了个对照数字:过去给一块新芯片做推理适配,通常要几十名工程师、​。3 天对 6 个月,这个比值太扎眼,当天中文互联网上就冒出一堆「英伟达的护城河塌了」的说法。我把能翻到的材料都翻了一遍,越看越觉得,塌掉的那一小块是真的,可塌的位置和很多人想的不一样。 阅读详情

沉寂了很久,接下来小编要朝着目标努力了。目前初步规划了2期内容:用 Python + 三类主流求解器(Gurobi、COPT、SCIP),把网络流问题和铁路运输经典问题两条线一以贯之地讲透。第 1 期讲网络流家族,第 2 期沿着铁路运输组织规划流程逐个建模求解。

1. 问题场景

这个场景你一定不陌生:
早高峰你要从家赶到公司打卡,路网中有几个路口和地标,每条路的通行时间不同(堵车程度不同)。你想知道:走哪条路总时间最短?
把路网抽象一下:

  • 节点:家、若干路口/地标、公司
  • 边:路口间的路段,带通行时间(分钟)
  • 起点:家
  • 终点:公司
  • 目标:家到公司的总通行时间最小

这就是一个最典型的最短路问题:在带权有向图上,求从起点到终点权值和最小的路径。

2. 数学建模

2.1 集合、参数与决策变量

在这里插入图片描述

2.2 目标函数与约束条件

在这里插入图片描述

3. 求解案例

为了让模型落地且便于读者手算验证,我们构造一个小型路网。

在这里插入图片描述

4. Python+Gurobi求解

from gurobipy import GRB,Model,quicksum

# ============================================================
# 1. 定义案例数据
# ============================================================
N = [
    1, 2, 3, 4, 5, 6
]
A = [
    (1, 2),
    (1, 3),
    (2, 3),
    (2, 4),
    (3, 4),
    (3, 5),
    (4, 6),
    (5, 4),
    (5, 6)
]
C = {
    (1, 2): 6,
    (1, 3): 4,
    (2, 3): 2,
    (2, 4): 2,
    (3, 4): 1,
    (3, 5): 2,
    (4, 6): 7,
    (5, 4): 1,
    (5, 6): 3
}
s = 1
t = 6
b = {
    1: 1,
    2: 0,
    3: 0,
    4: 0,
    5: 0,
    6: -1
}

# ============================================================
# 2. 建模与求解
# ============================================================
def build_and_solve(N: list, A: list, C: dict,b: dict, s: int, t: int):
    # ---- 建模 ----
    model = Model("ShortestPath_Gurobi")

    # 决策变量 x_{ij} in {0,1}
    x = model.addVars(A, vtype=GRB.BINARY, name="x")

    # 目标: min sum c_{ij} * x_{ij}
    model.setObjective(
        quicksum(C[i, j] * x[i, j] for (i, j) in A),
        GRB.MINIMIZE,
    )
    # 约束: 流平衡
    for i in N:
        out_expr = quicksum(x[i, j] for (ii, j) in A if ii == i)
        in_expr = quicksum(x[j, i] for (j, ii) in A if ii == i)
        model.addConstr(out_expr - in_expr == b[i], name=f"flow_balance_{i}")

    # ---- 求解 ----
    model.optimize()

    # ---- 结果 ----
    status = model.Status
    if model.Status == GRB.OPTIMAL:
        chosen = [(i, j) for (i, j) in A if x[i, j].X > 0.5]
        total = model.ObjVal
        path = reconstruct_path(chosen, s, t)
        return {
            "status": "OPTIMAL",
            "total_cost": total,
            "path": path,
            "chosen_edges": chosen,
        }
    return {"status": f"status={status}", "total_cost": None, "path": None, "chosen_edges": None}


def reconstruct_path(chosen, s, t):
    """由选中的边集合按出度链还原有序路径。"""
    nxt = {i: j for (i, j) in chosen}
    path = [s]
    cur = s
    while cur != t:
        cur = nxt[cur]
        path.append(cur)
    return path

# ============================================================
# 3. 主流程
# ============================================================
def main():
    res = build_and_solve(N, A, C,b, s, t)
    if res["status"] == "OPTIMAL":
        print(f"求解状态: OPTIMAL")
        print(f"目标值:{res['total_cost']}")
        print(f"选中边: {res['chosen_edges']}")
        print(f"最短路径: {res['path']}")

    else:
        print(f"求解状态: {res['status']} (无可行径路)")


if __name__ == "__main__":
    main()

5. Python+COPT求解

from coptpy import COPT, Envr

# ============================================================
# 1. 定义案例数据
# ============================================================
N = [
    1, 2, 3, 4, 5, 6
]
A = [
    (1, 2),
    (1, 3),
    (2, 3),
    (2, 4),
    (3, 4),
    (3, 5),
    (4, 6),
    (5, 4),
    (5, 6)
]
C = {
    (1, 2): 6,
    (1, 3): 4,
    (2, 3): 2,
    (2, 4): 2,
    (3, 4): 1,
    (3, 5): 2,
    (4, 6): 7,
    (5, 4): 1,
    (5, 6): 3
}
s = 1
t = 6
b = {
    1: 1,
    2: 0,
    3: 0,
    4: 0,
    5: 0,
    6: -1
}


# ============================================================
# 2. 建模与求解
# ============================================================
def build_and_solve(N: list, A: list, C: dict,b: dict, s: int, t: int):

    # ---- 建模 ----
    model = Envr().createModel("ShortestPath_COPT")

    # 决策变量 x_{ij} in {0,1}
    x = model.addVars(A,vtype=COPT.BINARY, nameprefix="x")

    # 目标: min sum c_{ij} * x_{ij}
    model.setObjective(sum(C[i, j] * x[i, j] for (i, j) in A), COPT.MINIMIZE)

    # 约束: 流平衡
    for i in N:
        out_expr = sum(x[i, j] for (ii, j) in A if ii == i)
        in_expr = sum(x[j, i] for (j, ii) in A if ii == i)
        model.addConstr(out_expr - in_expr == b[i], name=f"flow_balance_{i}")

    # ---- 求解 ----
    model.solve()

    # ---- 结果 ----
    status = model.status
    if status == COPT.OPTIMAL:
        chosen = [(i, j) for (i, j) in A if x[i, j].X > 0.5]
        total = float(model.getAttr(COPT.Attr.BestObj))
        path = reconstruct_path(chosen, s, t)
        return {"status": "OPTIMAL", "total_cost": total, "path": path, "chosen_edges": chosen}
    return {"status": f"status={status}", "total_cost": None, "path": None, "chosen_edges": None}


def reconstruct_path(chosen, s, t):
    """由选中的边集合按出度链还原有序路径。"""
    nxt = {i: j for (i, j) in chosen}
    path = [s]
    cur = s
    while cur != t:
        cur = nxt[cur]
        path.append(cur)
    return path


# ============================================================
# 3. 主流程
# ============================================================
def main():
    res = build_and_solve(N, A, C,b, s, t)
    if res["status"] == "OPTIMAL":
        print(f"求解状态: OPTIMAL")
        print(f"目标值:{res['total_cost']}")
        print(f"选中边: {res['chosen_edges']}")
        print(f"最短路径: {res['path']}")

    else:
        print(f"求解状态: {res['status']} (无可行径路)")


if __name__ == "__main__":
    main()

6. Python+SCIP求解

from pyscipopt import Model, quicksum

# ============================================================
# 1. 数据读取
# ============================================================
N = [
    1, 2, 3, 4, 5, 6
]
A = [
    (1, 2),
    (1, 3),
    (2, 3),
    (2, 4),
    (3, 4),
    (3, 5),
    (4, 6),
    (5, 4),
    (5, 6)
]
C = {
    (1, 2): 6,
    (1, 3): 4,
    (2, 3): 2,
    (2, 4): 2,
    (3, 4): 1,
    (3, 5): 2,
    (4, 6): 7,
    (5, 4): 1,
    (5, 6): 3
}
s = 1
t = 6
b = {
    1: 1,
    2: 0,
    3: 0,
    4: 0,
    5: 0,
    6: -1
}

# ============================================================
# 2. 建模与求解
# ============================================================
def build_and_solve(N: list, A: list, C: dict,b: dict, s: int, t: int):
    # ---- 建模 ----
    model = Model("ShortestPath_SCIP")

    # 决策变量 x_{ij} in {0,1}
    x = {}
    for (i, j) in A:
        x[i, j] = model.addVar(lb=0, ub=1, vtype="BINARY", name=f"x_{i}_{j}")

    # 目标: min sum c_{ij} * x_{ij}
    model.setObjective(quicksum(C[i, j] * x[i, j] for (i, j) in A), "minimize")

    # 约束: 流平衡
    for i in N:
        out_expr = quicksum(x[i, j] for (ii, j) in A if ii == i)
        in_expr = quicksum(x[j, i] for (j, ii) in A if ii == i)
        model.addCons(out_expr - in_expr == b[i], name=f"flow_balance_{i}")

    # ---- 求解 ----
    model.setRealParam("limits/time", 30)
    model.optimize()

    # ---- 结果 ----
    status = model.getStatus()
    if status == "optimal":
        chosen = [(i, j) for (i, j) in A if model.getVal(x[i, j]) > 0.5]
        total = model.getObjVal()
        path = reconstruct_path(chosen, s, t)
        return {"status": "OPTIMAL", "total_cost": total, "path": path, "chosen_edges": chosen}
    return {"status": f"status={status}", "total_cost": None, "path": None, "chosen_edges": None}


def reconstruct_path(chosen, s, t):
    """由选中的边集合按出度链还原有序路径。"""
    nxt = {i: j for (i, j) in chosen}
    path = [s]
    cur = s
    while cur != t:
        cur = nxt[cur]
        path.append(cur)
    return path


# ============================================================
# 3. 主流程
# ============================================================
def main():
    res = build_and_solve(N, A, C, b, s, t)
    if res["status"] == "OPTIMAL":
        print(f"求解状态: OPTIMAL")
        print(f"目标值:{res['total_cost']}")
        print(f"选中边: {res['chosen_edges']}")
        print(f"最短路径: {res['path']}")

    else:
        print(f"求解状态: {res['status']} (无可行径路)")


if __name__ == "__main__":
    main()

参考资料

[1] Ahuja, Ravindra K. et al. “Network Flows: Theory, Algorithms, and Applications.” (1993).

如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情

相关推荐

Playwright: Pytest vs Library vs LibraryAsync:三者如何选?

Python中Playwright的3个Target:Pytest(推荐用于E2E自动化测试,支持报告、并行、重试)、Library(同步脚本,适合爬虫与简单任务,需手动管理浏览器)、LibraryAsync(异步脚本,适用于高并发批量操作)。选择依据:测试项目选Pytest,轻量脚本选Library,高并发场景选LibraryAsync。

SmallBull的博客 215

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

weixin_53637133的博客 178

用Python和sklearn预测NBA比赛胜负:从数据清洗到模型优化的完整流程

本文详细介绍了如何使用Python和sklearn构建NBA比赛胜负预测模型,涵盖从数据清洗、特征工程到模型优化与部署的完整流程。通过对比随机森林、XGBoost等主流算法,提供实战技巧和解决方案,帮助数据爱好者掌握体育数据分析的核心技术。

weixin_30823001的博客 134

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 425

Rasa Core开发指南

文章目录1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型4. 搭建CustomA...

老蒋也疯狂 1万+

手把手教你修改miniwiggler配置信息,解决UDE连接问题(附FT_PROG工具下载)

本文详细介绍了如何使用FT_PROG工具修改miniwiggler配置信息,解决UDE连接问题。通过分析FT2232芯片的EEPROM结构,提供从驱动安装到配置烧写的完整流程,帮助开发者实现无缝连接英飞凌TriBoard开发板。文章还包含常见错误解决方案和高级批量配置技巧。

weixin_30919429的博客 374

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 241

uCOS中的消息邮箱(:task与task之间传递一个数据(数据缓冲区))

程序需求,需要完成task与task之间  字符数组的数据传输 比如:在ucos中,串口2接收的字符数组是不定时的&不定长的;只有当接收到数据的时候_才将数据赋值给新数组 具体的程序示意如下: 图1:消息邮箱测试中的     向消息邮箱发送消息(OSMboxPost(Str_Box,(void*)rec);//发送消息--(向 消息邮箱_msg_key发送消息) ),实际项目需求的

faguoduifangui的博客 4540

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 427

数字IC后端PPA优化实战:Timing一致性策略与Module Region布局技巧

本文深入探讨了数字IC后端设计中的PPA优化实战,重点解析了Timing一致性问题及其解决方案。通过调整Clock Uncertainty、Timing Derate和RC Scale Factor等关键参数,使Innovus等PR工具的分析结果更接近PrimeTime签核结果。同时,文章详细介绍了Module Region布局技巧,通过为关键模块划定物理区域,优化单元摆放,有效减少线延迟,从而协同提升时序收敛效率与设计可预测性。

weixin_29218963的博客 203

第170篇 因子图优化入门——图模型在状态估计中的应用

本文系统介绍了从滤波方法到因子图优化的思维转变,重点解析了因子图的原理与应用。首先对比了递推式滤波(卡尔曼滤波等)与全局优化的区别,指出优化方法能利用所有信息且适合处理稀疏结构。然后详细阐述了因子图的二部图结构(变量节点和因子节点)及其将复杂概率分布分解为小因子乘积的优势。文章讲解了因子图优化如何转化为最小二乘问题,并介绍高斯-牛顿法和LM方法等求解技术。最后对比了g2o、Ceres和GTSAM三大主流框架的特点及适用场景,强调了初始化和鲁棒核函数的重要性,为SLAM相关面试提供了实用建议。

郑伟强dev的专栏 374

yolo 和 deft 算法的区别

你应该是打错了:是,不是 defrat;

曾大强博客 257

基于YOLOv10的微小目标检测,多头检测器提升小目标检测精度

引入多头检测器助力YOLOv10,暴力提升小目标检测性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2571

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 269

量产导入 | 产品可靠性测试标准完整大集合(JEDEC/IEC/SAE…)

产品可靠性测试是产品质量保证中的重要一环, 包含有Pre-con, aging(寿命)和ESD(静电)等, 下面就收集了权威标准JEDEC全系列, 请参照如下 同时也附上其它的可靠性标准供大家参考及交叉理解, 可能侧重点不同, 大家可以参考下。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1664

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

两张表合并之后,行数悄悄多了一倍

pandas merge 行数异常膨胀源于右表键不唯一,导致数据静默复制。实测显示,未聚合的右表(756行)与左表合并后行数增至504行,合计膨胀3.5倍,但无报错。validate 参数仅在检查键唯一性时有效,one_to_one 和 many_to_one 可拦截问题,但需结合 duplicated() 前置检查。正确做法为先按键聚合右表,再合并,避免重复。建议合并前后核对行数、合计,并使用 indicator=True 排查匹配情况,确保数据一致性。

patrickstar231的博客 227

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 170

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

我用 200 行代码写了个“代码屎山检测器“,扫完公司的老项目后我沉默了

这个工具不能帮你把屎山铲平,但至少能让你知道自己面对的是多大的山,也能在代码评审时用数据说话——“这个 PR 把圈复杂度从 12 推到了 18,能不能拆一下?毕竟,不能量化的东西,就没法改进。

xixiaoyunya的博客 251

智慧农业实战:育秧车间秧盘计数与苗情分级的Python实现

首先,建立统一的数据结构,保存每盘秧苗的编号、批次、覆盖度、叶色得分和播种天数。A = "壮苗"B = "合格苗"C = "弱苗"@dataclassdays: int。

荆棘鸟智能的博客 120

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 237

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 494

【随笔】KV缓存量化:省下的显存,要付出多少数值误差

用可运行量化器解释位宽、比例信息、分组和离群值的关系,核算KV缓存实际载荷,并给出Transformers配置与容量、延迟、质量验收方法。

code2cat的博客 470

Spring Boot 自动配置原理

Spring Boot 自动配置由 @EnableAutoConfiguration 导入选择器,读取 jar 中 .imports 候选清单,经去重、排序、排除后逐类做条件判断,通过才注册 Bean。延迟导入让用户 Bean 优先,@ConditionalOnMissingBean 使默认配置让位。失效时查清单和 Negative matches。

2401_89855466的博客 394

【每天一个 Python 小案例29】Python 实现商品购物车

本篇实现一个购物车:商品目录、加入商品、修改数量、移除商品、查看小计、计算满减与 VIP 折扣、结算扣库存。核心设计是"目录与购物车分离"——目录存商品主数据,购物车只存 {商品编号: 数量};金额一律用 Decimal 并做 ROUND_HALF_UP 舍入。折扣部分讲清阶梯满减的匹配顺序(阈值从高到低、命中即停)与叠加顺序(先满减、后打折),并用一次完整结算演示 706 元如何变成 613.70 元。

xinjiyaya的博客 217

Python的字典

Python字典是存储键值对的数据结构,通过键(key)快速查找对应的值(value)。可使用{}定义,支持增删改查操作:通过dict[key]查询或修改值,get()方法安全获取并设置默认值,del dict[key]删除键值对,keys()、values()和items()用于遍历。items()结合双变量循环可高效遍历所有键值对,提升代码可读性与灵活性。

qq_43010954的博客 198

【AI 开发从入门到进阶 · 09】RAG 实战:用 Embedding + FAISS 从零搭建本地知识库问答(含切分、重排与幻觉控制)

本文系统讲解RAG(检索增强生成)的实现与优化,从为何选择RAG而非提示工程或微调出发,完整演示一条可运行的中文RAG链路:文档加载、递归切分、向量化、FAISS索引构建、混合检索与Prompt生成。重点剖析五大关键环节——切分策略、Embedding选型、混合检索、重排(Rerank)及幻觉控制,并强调分模块评估的重要性。附常见问题排查与生产实践建议,为构建高效、可信的企业知识问答系统提供完整指南。

信息安全领域优质创作者|操作系统领域专家 73
上一篇: 【MDVRP】Python+Gurobi求解运输问题建模实践四
Better.C
博客等级 码龄9年 1万+粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Better.C

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

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

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

打赏作者

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

抵扣说明:

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

余额充值