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

修改Python版Dijkstra算法为从命令行读写输入输出文本文件

邻接矩阵版Dijkstra算法命令行适配方案

修改说明

  • 引入Python标准库sys读取命令行参数,无需手动交互输入数据
  • 输入数据从命令行指定的txt文件读取,输出结果直接写入指定的txt文件
  • 保留原Dijkstra算法核心逻辑不变,仅调整输入输出链路

完整代码

import sys

def dijkstra(adj, n, source=0):
    # 初始化距离数组,初始值为无穷大
    dist = [float('inf')] * n
    dist[source] = 0
    visited = [False] * n

    for _ in range(n):
        # 找到未访问节点中距离最小的节点
        min_dist = float('inf')
        u = -1
        for i in range(n):
            if not visited[i] and dist[i] < min_dist:
                min_dist = dist[i]
                u = i
        if u == -1:
            break  # 剩余节点均不可达
        visited[u] = True
        # 更新邻接节点的最短距离
        for v in range(n):
            if not visited[v] and adj[u][v] != float('inf') and dist[v] > dist[u] + adj[u][v]:
                dist[v] = dist[u] + adj[u][v]
    return dist

if __name__ == "__main__":
    # 校验命令行参数数量
    if len(sys.argv) != 3:
        print("使用方法错误,正确格式:python3 file.py 输入文件路径 输出文件路径")
        sys.exit(1)
    input_path = sys.argv[1]
    output_path = sys.argv[2]

    # 读取输入文件
    adj_matrix = []
    with open(input_path, 'r', encoding='utf-8') as f:
        n = int(f.readline().strip())
        for _ in range(n):
            # 输入中9999代表不可达,自动转换为无穷大
            row = list(map(lambda x: float('inf') if int(x) == 9999 else int(x), f.readline().strip().split()))
            adj_matrix.append(row)
    
    # 计算最短路径
    result = dijkstra(adj_matrix, n)

    # 写入输出文件
    with open(output_path, 'w', encoding='utf-8') as f:
        for idx, distance in enumerate(result):
            if distance == float('inf'):
                f.write(f"顶点0到顶点{idx}的最短路径:不可达\n")
            else:
                f.write(f"顶点0到顶点{idx}的最短路径长度:{distance}\n")

使用说明

  1. 按照要求准备输入txt文件:第一行为顶点数n,后续n行每行有n个空格分隔的整数,不可达的边权重填9999即可
  2. 执行命令:python3 file.py input.txt output.txt
  3. 计算完成后结果会直接写入指定的输出txt文件中

示例

输入文件input.txt内容示例:

4
0 2 9999 5
9999 0 3 9999
9999 9999 0 1
9999 9999 9999 0

输出文件output.txt内容示例:

顶点0到顶点0的最短路径长度:0
顶点0到顶点1的最短路径长度:2
顶点0到顶点2的最短路径长度:5
顶点0到顶点3的最短路径长度:4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:24:05