7-8 旅行售货员

7-8 旅行售货员

某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(或总旅费)最小。

输入格式:

第一行为城市数n

下面n行n列给出一个完全有向图,如 i 行 j 列表示第 i 个城市到第 j 个城市的距离。

输出格式:

一个数字,表示最短路程长度。

输入样例:

3
0 2 1
1 0 2
2 1 0

输出样例:

3

简化版代码

解释:下面这个代码是没有进行剪枝的,也就是说没有优化,但是可以过pta,所以我也给出

#include <iostream>const int N = 20;bool vis[N];
int n, mp[N][N], ans = 0x3f3f3f3f;void dfs(int u, int siz, int fee)
{for (int i = 0; i < n; ++i) {if (i == u || vis[i]) continue;vis[i] = true;dfs(i, siz + 1, fee + mp[u][i]);vis[i] = false;}
}int main()
{scanf("%d", &n);for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j)scanf("%d", &mp[i][j]);dfs(0, 0, 0);printf("%d", ans);return 0;
}

解释:这个代码是在上面这个代码的基础上加上了剪枝的代码,也就是优化了一下,如果只是为了过pta,用上面这份代码就够了

这个是优化的部分代码

    if (siz == n && ans > fee) {ans = fee;}if (fee >= ans || siz >= n) return ;if (siz < n - 1 && vis[0]) return ;

完整代码:

#include <iostream>const int N = 20;bool vis[N];
int n, mp[N][N], ans = 0x3f3f3f3f;void dfs(int u, int siz, int fee)
{if (siz == n && ans > fee) {ans = fee;}if (fee >= ans || siz >= n) return ;if (siz < n - 1 && vis[0]) return ;for (int i = 0; i < n; ++i) {if (i == u || vis[i]) continue;vis[i] = true;dfs(i, siz + 1, fee + mp[u][i]);vis[i] = false;}
}int main()
{scanf("%d", &n);for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j)scanf("%d", &mp[i][j]);dfs(0, 0, 0);printf("%d", ans);return 0;
}

注释版代码

#include <iostream>const int N = 20;bool vis[N];
int n, mp[N][N], ans = 0x3f3f3f3f;// 深度优先搜索函数
void dfs(int u, int siz, int fee)
{// 如果已经找到了一种方案且费用更低,更新答案if (siz == n && ans > fee) {ans = fee;}// 如果当前费用已经超过当前答案或者已经选择了足够的点,结束递归if (fee >= ans || siz >= n) return;// 如果还需要选择一个点但是第一个点已经被选中,结束递归if (siz < n - 1 && vis[0]) return;// 遍历所有未被选择的点for (int i = 0; i < n; ++i) {if (i == u || vis[i]) continue;// 选择一个点并递归vis[i] = true;dfs(i, siz + 1, fee + mp[u][i]);// 恢复状态,回溯vis[i] = false;}
}int main()
{// 输入点的数量scanf("%d", &n);// 输入图的邻接矩阵for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j)scanf("%d", &mp[i][j]);// 从第一个点开始进行深度优先搜索dfs(0, 0, 0);// 输出最小费用printf("%d", ans);return 0;
}

java版代码

import java.util.Scanner;public class Main {static final int N = 20;static boolean[] vis = new boolean[N];static int[][] mp = new int[N][N];static int n, ans = Integer.MAX_VALUE;// 深度优先搜索函数static void dfs(int u, int siz, int fee) {// 如果已经找到了一种方案且费用更低,更新答案if (siz == n && ans > fee) {ans = fee;}// 如果当前费用已经超过当前答案或者已经选择了足够的点,结束递归if (fee >= ans || siz >= n) return;// 如果还需要选择一个点但是第一个点已经被选中,结束递归if (siz < n - 1 && vis[0]) return;// 遍历所有未被选择的点for (int i = 0; i < n; ++i) {if (i == u || vis[i]) continue;// 选择一个点并递归vis[i] = true;dfs(i, siz + 1, fee + mp[u][i]);// 恢复状态,回溯vis[i] = false;}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 输入点的数量n = scanner.nextInt();// 输入图的邻接矩阵for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {mp[i][j] = scanner.nextInt();}}// 从第一个点开始进行深度优先搜索dfs(0, 0, 0);// 输出最小费用System.out.println(ans);}
}

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

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

相关文章

VS(Visual Studio)更改文件编码

vs默认编码是GB2312,更改为UTF-8 工具->自定义

【数据结构入门精讲 | 第十篇】考研408排序算法专项练习(二)

在上文中我们进行了排序算法的判断题、选择题的专项练习&#xff0c;在这一篇中我们将进行排序算法中编程题的练习。 目录 编程题R7-1 字符串的冒泡排序R7-1 抢红包R7-1 PAT排名汇总R7-2 统计工龄R7-1 插入排序还是堆排序R7-2 龙龙送外卖R7-3 家谱处理 编程题 R7-1 字符串的冒…

Java进阶(第六期): Arrays类(数组工具)、冒泡排序、选择排序、二分查找、【正则表达式】、Java正则爬取信息

文章目录 一、Arrays1.1代码示例&#xff1a; 二、冒泡排序2.1 代码示例 三、选择排序3.1 代码示例 四、二分查找4.1 代码示例 &#xff08;这里采用乱序数组&#xff09; 五、正则表达式5.1 正则表达式的基本使用5.2 正则表达式爬取信息练习 Java进阶&#xff08;第六期&#…

吉利银河L6 车机等问题交流/记录

车机低电量重启问题 动力电池低电量(2km) 时,播放视频,会大概5min的周期,做周期性的车机重启,我点了停车发电,让发动机发电才避免重启. app闪退 app不可见 你只能安装他应用商店少的可怜的app 自己安装的他不显示,就算你把他显示了,也可能播放视频中出现app闪退现象 车机…

OpenCV学习笔记 - 使用 OpenCV 检测运动的最简单方法

一、运动检测 运动检测是检测视频序列中移动对象的过程。在计算机视觉中,它是检测视频帧中像素级变化的过程。我们可以用它来发现现实世界中的新对象,甚至执行与类无关的对象检测,这在地理空间分析、客户分析、监视、自治和其他相关领域非常有用。 如何检测视频中的运动?这…

Git的总体认知与具体实现

GIt概念 是一种分布式控制管理器 tips:敏捷开发 -> 先上线&#xff0c;后续开发再继续开发 集中式和分布式 集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来&#xff0c;并且如果服务器丢失了&#xff0c;那么所有的就都丢失了&#xff0c;你本机客户端仅…

数据处理系列课程 01:谈谈数据处理在数据分析中的重要性

一、数据分析 可能很多朋友第一次听到这个名词&#xff0c;那么我们先来谈一谈什么是数据分析。 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析&#xff0c;将它们加以汇总和理解&#xff0c;以求最大化地开发数据的功能&#xff0c;发挥数据的作用。数据分析是…

Web前端-JavaScript(Dom基础)

文章目录 1.1 DOM 介绍1.1.1 DOM简介1.1.2 DOM树 1.2. 获取元素1.2.1 根据ID获取元素1.2.2 根据标签名获取元素1.2.3 其它方式获取元素1.2.4 获取特殊元素 1.3 事件基础1.3.1 事件概述1.3.2 事件三要素1.3.3 执行事件步骤1.3.4 鼠标事件 1.4 操作元素1.4.1 操作元素内容1.4.2 属…

[Java][IOstream][转化流]以GBK读取数据用UTF-8写出数据的实例分析

在这里我们用到了转化流&#xff0c;所谓的转化流也就是实现字节流向字符流的转化。 我们都知道&#xff1a;Java提供了两种基础的字节流 FileInputStream可以让程序读入一个文件的信息 FileOutputStream可以让程序写出一个文件的信息 但是字节流处理的问题过于宏大&#x…

MyBatis的动态SQL

目录 一、什么是动态SQL? 二、MyBatis标签 1、if标签 2、where标签 3、set标签 4、trim标签 5、foreach标签 6、sql标签 7、bind标签 8、choose标签 9、include标签 一、什么是动态SQL? 动态SQL是一种在运行时动态生成和执行SQL查询语句的技术。它允许根据不同条…

服务器IBM x3650 m2 管理口访问故障处理

服务器的内存告警后&#xff0c;连接管理口查看信息&#xff0c;管理口状态灯显示正常&#xff0c;但是无法ping通和访问。 处理过程如下&#xff1a; 1、在centos 6.6中安装ipmitool&#xff0c;替换为阿里云的yum源&#xff0c;然后安装。 # wget -O /etc/yum.repos.d/Cen…

基于Kubernetes的jenkins上线

1、基于helm 部署jenkins 要求&#xff1a;当前集群配置了storageClass&#xff0c;并已指定默认的storageClass&#xff0c;一般情况下&#xff0c;创建的storageClass即为默认类 指定默认storageClass的方式 # 如果是新创建默认类&#xff1a; apiVersion: storage.k8s.io/v1…

用SQL语句创建数据库表的注意事项

1.所有的符号都要在英文状态下使用。 2.表的名称和字段尽量使用括起来。 3.AUTO_INCREMENT(自增) 4.字符串使用单引号 括起来 5.所有的语句后面加 , (英文的)&#xff0c;最后一个不用加。 6.PRIMARY KEY() 主键&#xff0c;一般一个表只有一个唯一 的主键&#xff01; …

Python遥感图像处理指南(6)-绘制散点图和输出PDF报告

今天我们来学习一些其他技能,在写论文时通常需要将结果图表进行整理,拼接图片很不方便,我们可以借助Pyhton将处理的图片和图标整合到PDF中输出,提高生产效率。 1、环境安装 安装PyPDF2 包 pip install PyPDF2 2、创建PDF 我们将改造之前写的load_landsat_image 方法,来…

Jenkins自动化部署之后端

准备工作参考本人另外几篇Jenkins相关的文章 新建任务 添加参数配置 字符串参数&#xff1a;分支名称 多选框&#xff1a;项目名称&#xff08;Extended Choice Parameter插件必备&#xff0c;插件安装参考我另外的文章&#xff09; 这个分割规则自定义。只要根据Jenkins…

【投稿】北海 - Rust与面向对象(二)

模板方法 Rust提供了trait&#xff0c;类似于面向对象的接口&#xff0c;不同的是&#xff0c;将传统面向对象的虚函数表从对象中分离出来&#xff0c;trait仍然是一个函数表&#xff0c;只不过是独立的&#xff0c;它的参数self指针可以指向任何实现了该trait的结构。 从对象中…

Go自定义PriorityQueue优先队列使用Heap堆

题目 分析 每次找最大的&#xff0c;pop出来 然后折半&#xff0c;再丢进去 go写法 go如果想用heap&#xff0c;要实现less\len\swap\push\pop 但可以偷懒&#xff0c;用sort.IntSlice,已经实现了less\len\swap 但由于目前是大根堆&#xff0c;要重写一下less 因此&#xff…

Maven依赖传递和依赖冲突

1 依赖传递 1.1 什么是依赖传递 现有Maven项目A、B、C&#xff0c;如果项目B依赖项目A&#xff0c;项目C依赖项目B&#xff0c;则可以认为项目C依赖项目A。这就是项目依赖的传递性。 此时项目C中会存在项目A和项目B中的所有依赖。 依赖传递的作用 简化依赖导入检测依赖版本…

懒加载图片案例

整体效果&#xff1a; HTML部分&#xff1a; <div class"lazy-box"><img class"lazy" data-original"img/1.jpg" alt"1.jpg" width"960" height"540"><img class"lazy" data-original…

用大白话举例子讲明白云计算

前几天王坚院士在2023云栖大会上发表了关于云计算的演讲&#xff0c;听得我是热血沸腾&#xff0c;王院士称AI和云计算的结合是“云计算的第三次浪潮”&#xff0c;对此我深表认同。但是身边的很多朋友还不知道云计算是什么意思&#xff0c;有些人还认为百度云和百度云盘是一个…