头歌05-排列树实验-旅行商问题

"""

题目:设有n个城市组成的交通图,一个售货员从住地城市q出发,到其它城市各一次去推销货物,最后回到住地城市。

要求:假定两个城市a,b 从a到b的路程花费w_ab是已知的,问应该怎样选择一条花费最少的路线?

输入格式:

第一行n m q,n和m两个整数分别表示城市数n以及城市之间的单向路数量m,q表示住地城市(出发城市)

之后m行 a b w分别表示从城市a到城市b的单向路程的花费w_ab。

输出格式:

第一行输出最小花费是D,D表示计算得到的最小花费。

第二行输出最小花费共有N种方案,分别是:,N表示最小花费方案的种类,

接下来N行输出每种方案的前往顺序,以字典序排序输出,中间以空格分隔。

输入样例:

3 6 A

A B 12

A C 4

B C 5

B A 8

C B 7

C A 2

输出样例:

最小花费是19

最小花费共有2种方案,分别是:

A B C

A C B

"""


from itertools import permutations
import sysdef tsp(n, m, q, edges):# 将城市名称转换为索引city_to_index = {chr(ord('A') + i): i for i in range(n)}index_to_city = {i: chr(ord('A') + i) for i in range(n)}if q not in city_to_index:raise ValueError(f"住地城市 {q} 不存在于城市列表中。")q = city_to_index[q]# 初始化距离矩阵,INF 表示两城市间无直接路径INF = sys.maxsizedist = [[INF] * n for _ in range(n)]for i in range(n):dist[i][i] = 0for a, b, w in edges:if a not in city_to_index or b not in city_to_index:raise ValueError(f"城市 {a} 或 {b} 不存在于城市列表中。")dist[city_to_index[a]][city_to_index[b]] = w# 动态规划表dp = [[INF] * n for _ in range(1 << n)]dp[1 << q][q] = 0# 遍历所有状态for mask in range(1 << n):for i in range(n):if mask & (1 << i):for j in range(n):if not mask & (1 << j):dp[mask | (1 << j)][j] = min(dp[mask | (1 << j)][j], dp[mask][i] + dist[i][j])# 寻找最小花费min_cost = INFfor i in range(n):if i != q:min_cost = min(min_cost, dp[(1 << n) - 1][i] + dist[i][q])# 找到所有最小花费的路径def find_paths(mask, i):if mask == (1 << q):return [[index_to_city[i]]]paths = []for j in range(n):if mask & (1 << j) and dp[mask][i] == dp[mask ^ (1 << i)][j] + dist[j][i]:for path in find_paths(mask ^ (1 << i), j):paths.append(path + [index_to_city[i]])return pathsresult_paths = []for i in range(n):if i != q and dp[(1 << n) - 1][i] + dist[i][q] == min_cost:for path in find_paths((1 << n) - 1, i):result_paths.append(path)result_paths = sorted(result_paths)return min_cost, result_paths# 输入处理
n, m, q = input().split()
n = int(n)
m = int(m)edges = []
for _ in range(m):a, b, w = input().split()w = int(w)edges.append((a, b, w))min_cost, result_paths = tsp(n, m, q, edges)# 输出结果
print(f"最小花费是{min_cost}")
print(f"最小花费共有{len(result_paths)}种方案,分别是:")
for path in result_paths:print(" ".join(path))

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

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

相关文章

奇瑞控股携手契约锁推动客户、供应商及内部业务全程数字化

奇瑞控股集团是安徽省排名第一的制造业企业&#xff0c;同时入选中国企业家协会发布的中国500强、《财富》中国500强&#xff0c;连续21年位居中国品牌乘用车出口第一。 面对汽车行业“新四化”主题及“数字化”时代变革&#xff0c;奇瑞控股持续创新求变&#xff0c;率先引入电…

WIndows常用辅助工具命令

文章目录 目的pingnbtstatnetstattracert工作原理应用方案ipconfig作用arp作用at作用nslookup作用net作用格式用法ftp作用参数说明telnet作用参数说明tasklist作用参数说明结合筛选器目的 主要是整理windows 下常用cmd命令, 方便我们调试, 分析, 定位解决工程项目中遇到问题…

Java18的新特性介绍

一、概况 Java 18是Java编程语言的最新版本&#xff0c;它于2022年9月发布。Java 18引入了许多新特性和改进&#xff0c;以下是其中一些重要的新特性。 元编程功能&#xff1a;Java 18引入了元注释和元类型声明的功能&#xff0c;使开发人员能够在编译时对注解进行元处理。这为…

【C++】位图/布隆过滤器+海量数据处理

目录 一、位图 1.1 位图的概念 1.2 位图的实现 1.3 位图的应用&#xff08;面试题&#xff09; 二、布隆过滤器 2.1 布隆过滤器的引入 2.2 布隆过滤器概念 2.3 布隆过滤器的插入和查找 2.4 布隆过滤器的实现 2.5 布隆过滤器的优点和缺陷 2.6 布隆过滤器的应用&#…

Servlet 的 API

HttpServlet init&#xff1a;当 tomcat 收到了 /hello 这样的路径是请求后就会调用 HelloServlet&#xff0c;于是就需要对 HelloServlet 进行实例化&#xff08;只实例一次&#xff0c;后续再有请求也不实例了&#xff09;。 destory&#xff1a;如果是通过 smart tomcat 的停…

实验六 Java流式编程与网络程序设计 头歌

实验六 Java流式编程与网络程序设计 头歌 制作不易&#xff01;点个关注&#xff01;给大家带来更多价值&#xff01; 第1关 字节输入/输出流实现数据的保存和读取 package step1;import java.io.*; import java.util.*;public class SortArray {public static void main(St…

洗地机品牌哪个牌子好?实力派洗地机品牌TOP10榜单

洗地机依靠其洗、拖、吸、烘为一体的功能&#xff0c;能高效的完成地面清洁的工作&#xff0c;深受大家的喜爱。但是洗地机的型号越来越多&#xff0c;功能也越来越多&#xff0c;对于不想花大价钱&#xff0c;又想要高性价比的精致人群来说实在不友好&#xff0c;所以笔者今天…

C++ 中重写重载和隐藏的区别

重写&#xff08;override&#xff09;、重载&#xff08;overload&#xff09;和隐藏&#xff08;overwrite&#xff09;在C中是3个完全不同的概念。我们这里对其进行详细的说明 1、重写&#xff08;override&#xff09;是指派生类覆盖了基类的虚函数&#xff0c;这里的覆盖必…

如何写好科研论文(讨论)

讨论1. 如何去选取第一批要阅读的论文&#xff1f; 当我选择第一批要阅读的论文时&#xff0c;我会遵循以下几个步骤&#xff0c;以确保所选的论文对我的研究最有帮助&#xff1a; 研究问题的相关性&#xff1a; 明确我的研究问题或主题&#xff1a;首先&#xff0c;我会确保自…

实例展示vue单元测试及难题解惑

通过生动详实的例子带你排遍vue单元测试过程中的所有疑惑与难题。 技术栈&#xff1a;jest、vue-test-utils。 共四个部分&#xff1a;运行时、Mock、Stub、Configuring和CLI。 运行时 在跑测试用例时&#xff0c;大家的第一个绊脚石肯定是各种undifned报错。 解决这些报错…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(九)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 16 节&#xff09; P16《15.ArkUI-状态管理-任务统计案例》 1、实现任务进度卡片 怎么让进度条和进度展示文本堆叠展示&#xff1…

./scripts/Makefile.clean 文件分析

文章目录 目标 $(subdir-ymn)目标__clean $(clean-dirs):     make -f ./scripts/Makefile.clean obj$(patsubst _clean_%,%,$) $(clean-dirs)$(patsubst _clean_%,%,$)_clean_api _clean_cmd _clean_common _clean_disk _clean_drivers _clean_drivers/ddr/altera _clean_d…

react中的useEffect()的使用

useEffect()是react中的hook函数&#xff0c;作用是用于创建由渲染本身引起的操作&#xff0c;而不是事件的触发&#xff0c;比如Ajax请求&#xff0c;DOM的更改 首先useEffect()是个函数&#xff0c;接受两个参数&#xff0c;第一个参数是一个方法&#xff0c;第二个参数是数…

数据结构--树与二叉树--编程求以孩子兄弟表示法存储的森林的叶结点个数

数据结构–树与二叉树–编程求以孩子兄弟表示法存储的森林的叶结点个数 题目 编程求以孩子兄弟表示法存储的森林的叶结点个数 ps&#xff1a;题目来源2025王道数据结构 思路 树上的操作大多数是通过递归进行的 我们可以从根节点开始递归 如果结点 N 没有孩子指针&#xff…

【Entity Framework】如何理解EF中的级联删除

【Entity Framework】如何理解EF中的级联删除 文章目录 【Entity Framework】如何理解EF中的级联删除一、概述二、发生级联行为时2.1/删除主体/父实体2.2/断开关系 三、发生级联行为的位置3.1/级联删除被跟踪实体3.2/数据库中的级联删除 四、级联NULL 一、概述 Entity Framewo…

vue3 路由跳转 携带参数

实现功能&#xff1a;页面A 跳转到 页面B&#xff0c;携带参数 路由router.ts import { createRouter, createWebHistory } from "vue-router";const routes: RouteRecordRaw[] [{path: "/demo/a",name: "aa",component: () > import(&quo…

x264 码率控制原理:x264_ratecontrol_start 函数

x264_ratecontrol_start 函数 函数原理 函数功能:编码一帧之前,为当前帧选择一个量化 QP,属于帧级别码率控制;这对于控制视频质量和文件大小至关重要。通过调整QP,编码器可以在保持视频质量的同时,尽可能减小输出文件的大小。函数参数:x264_t *h: 编码器上下文结构体指…

十七、个人信息出境标准合同的具体内容有哪些?

根据《标准合同办法》第六条&#xff0c;标准合同应当严格按照网信办制定版本订立&#xff0c;个人信息处理者可以与境外接收方约定其他条款&#xff0c;但不得与标准合同相冲突。 根据《标准合同办法》附件&#xff0c;目前版本的标准合同内容主要包括&#xff1a; 1. 个人信…

Flutter 中的 TextButton 小部件:全面指南

Flutter 中的 TextButton 小部件&#xff1a;全面指南 在Flutter的世界里&#xff0c;TextButton是一个基础的小部件&#xff0c;用于创建只包含文本的按钮。它通常用于对话框、表单以及需要强调主要操作的界面。本文将为您提供一个全面的指南&#xff0c;帮助您了解如何使用T…

地信遥感测绘电子书

《地理信息系统概论》&#xff0c;黄杏元&#xff0c;马劲松编著&#xff0c;第三版&#xff0c;高等教育出版社&#xff0c;2008年 《地理信息系统》&#xff08;第二版&#xff09;汤国安&#xff0c;赵牡丹&#xff0c;杨昕等编&#xff0c;高等教育出版社&#xff0c;2010…