AcWing算法基础课笔记——最短Hamilton路径

news2024/10/7 10:20:14

最短Hamilton路径

题目

给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。

输入格式
第一行输入整数n。

接下来 n 行每行n个整数,其中第i行第j个整数表示点i到j的距离(记为a[i,j])。

对于任意的x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]>=a[x,z]。

输出格式
输出一个整数,表示最短Hamilton路径的长度。

数据范围
1 ≤ n ≤ 20
0 ≤ a[i,j] ≤ 107
输入样例:
5
0 2 4 5 1
2 0 6 5 3
4 6 0 8 3
5 5 8 0 5
1 3 3 5 0
输出样例:
18

思路

请添加图片描述

f[i, j]表示从0走到j,走过的所有点是i的所有路径的最小值。

例如,对于i = 111000,表示走过前面3个点到j的路径。

因此f[i, j]可以由路径的倒数第二个节点划分,也就是说可以根据倒数第二个节点是0 ,1, 2, …,n - 1来划分f[i, j]的来源。

若有一条从0 - > … - > k - > j的路径,k是f[i, j]的倒数第二个结点,那么f[i, j] = f[i - {j}, k] + a[k, j]。其中i - {j}表示在i中删去j这个结点,a[k, j]表示从k走到j的代价。

代码

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;
const int N = 20, M = 1 << N;

int n;
int w[N][N];
int f[M][N];

int main() {
	cin >> n;
	for(int i = 0; i < n; i ++ ) {
		for(int j = 0; j < n; j ++ ) {
			cin >> w[i][j];
		}
	}
	
	memset(f, 0x3f, sizeof f);
	
	f[1][0] = 0; // 从0走到0的路径代价为0
	
	//列举所有路径i
	for(int i = 0; i < 1 << n; i ++ ) {
		//列举所有结点 j
		for(int j = 0; j < n; j ++ ) {
			// 如果i 包含了j 
			if(i >> j & 1) {
				//列举路径i上除了j的其他点k  
				for(int k = 0; k < n; k ++ ) {
					if((i - (1 << j)) >> k & 1) {
						f[i][j] = min(f[i][j], f[i - (1 << j)][k] + w[k][j]); 
					}
				} 
			}
		}
	} 
	
	//答案为走过所有路径的到n - 1的路径的代价 
	cout << f[(1 << n) - 1][n - 1] << endl;
	return 0;
}

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

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

相关文章

SpringCloud分布式微服务链路追踪方案:Skywalking

一、引言 随着微服务架构的广泛应用&#xff0c;系统的复杂性也随之增加。在这种复杂的系统中&#xff0c;应用通常由多个相互独立的服务组成&#xff0c;每个服务可能分布在不同的主机上。微服务架构虽然提高了系统的灵活性和可扩展性&#xff0c;但也带来了新的挑战&#xf…

第六篇:精通Docker Compose:打造高效的多容器应用环境

精通Docker Compose&#xff1a;打造高效的多容器应用环境 1. 引言 1.1 目的与重要性 在现代软件开发中&#xff0c;随着应用程序的复杂性不断增加&#xff0c;传统的单一容器部署方式已无法满足需求。Docker Compose作为一种强大的工具&#xff0c;专门用于定义和运行多容器…

【Spring】Spring学习笔记

Spring数据库 Spring JDBC 环境准备 创建Spring项目, 添加以下依赖 H2 Database: 用于充当嵌入式测试数据库JDBC API: 用于连接数据库Lombok: 用于简化pojo的编写 然后添加配置文件: spring.output.ansi.enabledALWAYS spring.datasource.username*********** spring.dataso…

Java-方法引用

方法引用概念 把已经有的方法拿过来用&#xff0c;当做函数式接口中抽象方法的方法体 前提条件 1、引用处必须是函数式接口 2、被引用的方法必须已经存在 3、被引用方法的形参和返回值 需要跟抽象方法保持一致 4、被引用方法的功能要满足当前需求 方法引用格式示例 方…

Micro-ROS是什么?

Micro-ROS是ROS&#xff08;Robot Operating System&#xff0c;机器人操作系统&#xff09;生态系统的一个重要组成部分&#xff0c;专为微控制器&#xff08;Microcontrollers&#xff09;设计的轻量级ROS版本。它的目标是在资源有限的嵌入式平台上实现ROS 2的功能&#xff0…

如何跑起来一个前后端项目

后端部署 第一步配置自己的maven 第二步优先导入自己本地jar包当本地没有在从远程下载 第三步找到配置文件 第四步成功运行后端部署完毕 前端部署 第一步看看项目node_modules有没有文件如果有就是已经安装好了对应的依赖&#xff0c;没有执行npm install 第二步运行即可

UE5 中的碰撞问题

文章目录 一、初始准备二、重叠和碰撞三、自定义碰撞 一、初始准备 首先我们创建一个 BP_ThirdPerson 项目&#xff0c;然后在项目中创建两个 Actor 的蓝图 Blueprint 首先是一个移动的 BP_Push&#xff0c;这里使用 time line 循环旋转 cube 的相对位置 得到效果如下 然后是…

用MySQL和navicatpremium做一个项目—(财务管理系统)。

1 ER图缩小的话怕你们看不清&#xff0c;所以截了两张图 2 vsdx绘图结果 3DDL和DML,都有点长分了好多次上传&#xff0c;慢慢看 DDL -- 用户表 CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用…

量化交易 - 策略回测

策略回测 1、什么是策略回测&#xff1f;2、策略回测的作用3、策略回测系统概述3.1策略回测中相关的指标介绍3.2量化交易策略的资金容量3.3 完整的策略回测系统包含哪些内容 1、什么是策略回测&#xff1f; 策略回测&#xff0c;也称之为策略回溯测试&#xff0c;是指利用交易…

002关于Geogebra软件的介绍及与MatLab的区别

为什么要学Geogebra&#xff1f; 因为和MatLab的科学计算相比&#xff0c;GeoGebra重点突出教学展示&#xff0c;对于教师、学生人群来讲再合适不过了&#xff0c;尤其是可以融入到PPT里边呈现交互式动画&#xff0c;想想听众的表情&#xff01;这不就弥补了看到PPT播放数学公…

AI 开发平台(Coze)搭建《美食推荐官》

前言 本文讲解如何从零开始&#xff0c;使用扣子平台去搭建《美食推荐官》 bot直达&#xff1a;美食推荐官 - 扣子 AI Bot (coze.cn) 欢迎大家体验一下&#xff01;&#xff01; 效果 正文 prompt 美食推荐官的首要任务就是推荐美食&#xff0c;基于这个我们要给他一个基…

高考志愿不知道怎么填?教你1招,用这款AI工具,立省4位数

高中的岁月&#xff0c;就像一本厚厚的书&#xff0c;我们一页页翻过&#xff0c;现在&#xff0c;终于翻到了最后一页。但这不是结束&#xff0c;这是新的开始&#xff0c;是人生的新篇章。 高考落幕&#xff0c;学子们在短暂的放松后&#xff0c;又迎来了紧张的志愿填报。 “…

强化学习:值函数近似【Deep Q-Network,DQN,Deep Q-learning】

强化学习笔记 主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程&#xff0c;个人觉得赵老师的课件深入浅出&#xff0c;很适合入门. 第一章 强化学习基本概念 第二章 贝尔曼方程 第三章 贝尔曼最优方程 第四章 值迭代和策略迭代 第五章 强化学习实例分析:GridWorld…

开发自动回复信息的插件:代码的力量与智慧!

在信息爆炸的时代&#xff0c;自动回复信息的插件成为了许多用户和管理者的得力助手&#xff0c;这些插件能够根据预设的规则或算法&#xff0c;自动、快速、准确地回复用户的信息&#xff0c;极大地提高了沟通效率和用户体验。 而开发这样一款插件&#xff0c;离不开一系列精…

数字水产养殖中的鱼类追踪、计数和行为分析技术

随着全球人口增长和生态环境退化&#xff0c;传统捕捞已无法满足人类对水产品的需求&#xff0c;水产养殖成为主要的鱼类来源。数字水产养殖利用先进技术和数据驱动方法&#xff0c;对提高生产效率、改善鱼类福利和资源管理具有显著优势。 1 数字水产养殖的重要性 1.1 提高生…

汇聚荣做拼多多运营第一步是什么?

汇聚荣做拼多多运营第一步是什么?在众多电商平台中&#xff0c;拼多多凭借其独特的社交电商模式迅速崛起&#xff0c;吸引了大量消费者和商家的目光。对于希望在拼多多上开店的商家而言&#xff0c;了解如何进行有效运营是成功的关键。那么&#xff0c;汇聚荣做拼多多运营的第…

CSS的媒体查询:响应式布局的利器

关于CSS的媒体查询 CSS媒体查询是CSS层叠样式表(Cascading Style Sheets)中的一个核心功能&#xff0c;它使得开发者能够根据不同的设备特性和环境条件来应用不同的样式规则。这是实现响应式网页设计的关键技术&#xff0c;确保网站或应用能够在多种设备上&#xff0c;包括桌面…

flask 接收vuejs element el-upload传来的多个文件

el-upload通过action指定后端接口,并通过name指定传输的文件包裹在什么变量名中 <el-uploadclass="upload-demo"dragaction="https://ai.zscampus.com/toy/upload"multiplename="fileList":limit="10"accept=

World of Warcraft [CLASSIC] plugin lua

World of Warcraft [CLASSIC] plugin lua 魔兽世界lua脚本插件 World of Warcraft API - Wowpedia - Your wiki guide to the World of Warcraft D:\World of Warcraft\_classic_\Interface\AddOns zwf.lua function CountdownFunc()CountdownFrame CreateFrame("Fram…

【RedHat】使用VMware Workstation创建配置RedHat操作系统

目录 &#x1f31e;1.前言 &#x1f31e;2. 使用 VMware Workstation 创建配置RedHat &#x1f33c;2.1 VMware Workstation 创建虚拟机 &#x1f33c;2.2 安装RedHat 7.6 &#x1f30a;2.2.1 添加光盘 &#x1f30a;2.2.2 开始安装操作系统 &#x1f30a;2.2.3 系统初始…