python无向图最短距离问题

news2024/11/27 1:28:08

题目:

如下图所示无向图🐱‍🐉🐱‍🐉🐱‍🐉,其中蓝色边的长度是 1、橘色边的长度是 2、绿色边的长度是 3,求从 'A' 点到 'S' 点的最短距离为多少🤔

 我们得明白一个问题,这个是无向图,python对无向图进行处理的话,可以用到迭代.

迭代和递归区别:

(~ ̄▽ ̄)~所谓迭代,是通过循环重复执行一段代码来解决问题。它通常使用循环结构(如for循环、while循环)来反复执行一组指令,直到达到预定的条件为止。迭代的过程是逐步逼近解决方案,每一次迭代都在上一次的基础上进行操作,直到满足终止条件。

而👀递归是一种通过调用自身来解决问题的方法。递归函数会在执行过程中不断地调用自身🍭🍭🍭,每次调用都会将问题规模缩小,并向基本情况逼近。递归的过程可以看作是将一个大问题分解为多个相同类型的子问题,并通过解决子问题来解决原始问题。

  • 首先建立二维列表,对无向图路径及距离进行存储
  • 构造函数,对无向图A到S点距离进行统计,并写入到一个列表nums中
  • 调用函数,对函数传参
  • 打印出nums列表中的最小值,即是从A到S的最短距离

代码如下:

import os
import sys

# 请在此输入您的代码
# list  用来存储无向图的链接数据
list = [
    ["A", "E", 1],
    ["A", "B", 2],
    ["A", "C", 1],
    ["A", "D", 1],

    ["B", "G", 1],
    ["B", "J", 2],

    ["C", "D", 3],
    ["C", "G", 3],
    ["C", "F", 3],

    ["D", "G", 2],
    ["D", "H", 1],
    ["D", "I", 2],
    ["D", "E", 1],

    ["E", "H", 1],
    ["E", "I", 3],

    ["F", "J", 1],
    ["F", "G", 1],

    ["G", "K", 2],
    ["G", "I", 3],

    ["H", "L", 2],
    ["H", "I", 1],

    ["I", "M", 3],

    ["J", "S", 2],

    ["K", "N", 1],
    ["K", "L", 3],
    ["K", "P", 2],

    ["L", "R", 1],
    ["L", "M", 1],

    ["M", "N", 2],
    ["M", "Q", 1],
    ["M", "S", 1],

    ["N", "P", 1],

    ["o", "Q", 1],
    ["o", "R", 3],
    ["o", "P", 1],

    ["R", "S", 1],
]

# nums用来存储起点字母到终点字母的所有路径长度
nums = []
# 定迭代函数获取最短路径
def get(value):
    # global  用于在函数内部访问和修改全局变量
    global num  #num为nums中的元素变量名,代表路径的长度
    num += value[2]  #将一维列表中代表距离的数值赋值给num并累加
    # 遍历无向图list的每一个一维数组
    for next_value in list:
        # 遍历到S结束循环
        # 如果遍历的一维列表中的第二个字符串为S,则满足题意,循环结束
        if value[1] == 'S':
            nums.append(num)
            # break 结束当前循环
            break
        # 如果下一个列表的第一个字符串=第一个列表的第二个字符串,则进入函数进行迭代
        elif next_value[0] == value[1]:
            get(next_value)
# 遍历无向图list
for value in list:
    # 使起点为A,进入函数计算从A到S的距离
    if value[0] == 'A':
        # 初始化num为0
        num = 0
        # 调用定义的函数
        get(value)
#打印从起点到终点的最短距离
print(min(nums))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1146664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能在疾病治疗中的应用:机遇与挑战

人工智能在疾病治疗中的应用:机遇与挑战 随着人工智能技术的飞速发展,其在诸多领域的应用价值日益显现。本文将探讨人工智能技术在疾病治疗中的应用,包括其背景意义、技术概述、具体应用、发展前景以及总结。 一、背景意义 随着医学技术的…

【24.两两交换链表中的节点】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:ListNode* swapPairs(ListNode* head) {if(headnullptr||head->nextnullptr) return head;ListNode* curhead,*nexthead->next;ListNode* nnextswapPairs(n…

第 116 场 LeetCode 双周赛题解

A 子数组不同元素数目的平方和 I 枚举&#xff1a;枚举子数组&#xff0c;用集合记录当前子数组中不同元素的个数 class Solution { public:using ll long long;int sumCounts(vector<int> &nums) {ll mod 1e9 7;int n nums.size();unordered_set<int> s;l…

C++深度优先(DFS)算法的应用:收集所有金币可获得的最大积分

涉及知识点 深度优化(DFS) 记忆化 题目 节点 0 处现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 。给你一个长度为 n - 1 的二维 整数 数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示在树上的节点 ai 和 bi 之间存在一条边。另给你一个下标从 0…

微信小程序项目案例之导游证考试刷题小程序

前言 很多计算机专业的同学在做毕设选题时不知道该如何选题&#xff0c;有的同学是已经选择了要开发一款小程序&#xff0c;但是又不知道开发哪类小程序。本篇将为大家介绍一个小程序的开发方向&#xff0c;考试刷题类小程序是目前比较火的小程序项目之一&#xff0c;在小程序…

施耐德Lexium23A运行JOG停止时无减速过程解决方案

在现场调试时发现&#xff0c;如果Lexium23A工作在Pr模式下&#xff0c;无论是通过CANopen总线控制软件DI接通&#xff08;相应DI点设置为JOG运行&#xff09;还是实际的物理点接通&#xff0c;在JOG停止时&#xff0c;伺服电机会瞬间停止&#xff0c;造成机械冲击&#xff0c;…

响应式家居设计工作室网站模板源码

模板信息&#xff1a; 模板编号&#xff1a;849 模板编码&#xff1a;UTF8 模板颜色&#xff1a;橙色 模板分类&#xff1a;设计、广告、文化、影视 适合行业&#xff1a;广告设计类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff…

Redis(09)| Reactor模式

我们在使用Redis的时候&#xff0c;通常是多个客户端连接Redis服务器&#xff0c;然后各自发送命令请求(例如Get、Set)到Redis服务器&#xff0c;最后Redis处理这些请求返回结果。 从上一篇博文《Redis&#xff08;08&#xff09;| 线程模型》中知道Redis是单线程。Redis除了处…

<蓝桥杯软件赛>零基础备赛20周--第3周

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

ChatGPT 介绍

目录 什么是 AIGC&#xff1f; 图灵测试 chatgpt的发展历史 聊天机器人 Eliza Eliza 后辈 Alice 机器学习 smaterChild 人工神经网络 Transformer OpenAI (Generative Pre-trained Transformer&#xff09; AI会导致我们失业吗 什么是 AIGC&#xff1f; AIGC&#x…

一键添加命名前缀(文件)

&#xff08;一&#xff09;需求描述 在上班摸鱼的我正准备打开手机刷会儿CSDN论坛&#xff0c;老板发给我一个压缩包并要求我给里面所有的文件的名称添加一个前缀”大项目_”。我本以为只有几个文件需要改&#xff0c;便没放在心上&#xff0c;反倒是心里暗暗吐槽老板“这么简…

『力扣刷题本』:反转链表

一、题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a;…

20.2 OpenSSL 非对称RSA加解密算法

RSA算法是一种非对称加密算法&#xff0c;由三位数学家Rivest、Shamir和Adleman共同发明&#xff0c;以他们三人的名字首字母命名。RSA算法的安全性基于大数分解问题&#xff0c;即对于一个非常大的合数&#xff0c;将其分解为两个质数的乘积是非常困难的。 RSA算法是一种常用…

数据交换技术

一、数据交换 数据交换是实现在大规模网络核心上进行数据传输的技术基础。 常见的数据交换技术包括 电路交换报文交换分组交换 基于不同交换技术构建的网络分别称之为电路交换网络、报文交换网络和分组交换网络。 发展演变图&#xff1a; a) 电路交换 电路交换是最早出现…

Linux(Centos7)操作记录

1、nginx -t #Nginx配置文件检查 上述截图代表检查没问题 上述截图检查配置文件配置错误&#xff0c;并提示错误文件位置 2、systemctl restart nginx #重启Nginx 重启Nginx失败 3、systemctl status nginx.service #查看Nginx服务状态 80端口被占导致服务启动失败 4、n…

Modbus协议详解5:Modbus数据模型、寄存器、功能码 (非常重要)

Modbus是应用层上的协议&#xff0c;还是一种主从的通信协议&#xff0c;通信过程按照一定的协议规则进行&#xff0c;数据的交互也是有固定的格式的。 总的来说&#xff0c;Modbus是有着明确且固定的数据模型的&#xff0c;并且通信过程中的数据交互识别是要按照功能码进行的。…

IOC课程整理-4 Spring Bean基础

1 什么是 BeanDefinition&#xff1f; • BeanDefinition 是 Spring Framework 中定义 Bean 的配置元信息接口&#xff0c;包含&#xff1a; • Bean 的类名 • Bean 行为配置元素&#xff0c;如作用域、自动绑定的模式&#xff0c;生命周期回调等• 其他 Bean 引用&#xff0…

H5游戏源码分享-色块选择游戏

H5游戏源码分享-色块选择游戏 玩到后面色块越来越小&#xff0c;越来越难找出 <!DOCTYPE html><html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><meta charset"UTF-8"><meta na…

基于Java的教室设备管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…