頭歌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.pswp.cn/web/13751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13751.shtml
英文地址,請注明出處:http://en.pswp.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…