百子作业 —— 中国邮递员问题

article/2025/10/8 7:17:30

题目

严老师和宋老板去勘测武威市区的道路网,每一条路都需要勘测,且需要两人合作.武威市区可以近似地看成六横六纵组成的道路网,自西向东依次为学府路、民勤路、西关路、中关路、富民路、滨河路;自北向南依次为雷海路、宣武路、祁连大道、商业街、南关路、古浪街,任意两个相邻的路口之间的间距均可以认为是500米。
初始时,严老师和宋老板在民勤路与商业街相交的十字路口,最终仍然需要回到这个位置,则他俩至少需要走多少千米?并设计一条路线。

解析

题目对应的图。
在这里插入图片描述
本题是找欧拉回路。路径可以重复走,节点可以重复访问。
由于本题的权是相同的,都是 500 m 500m 500m,因此本题节点虽然多,但是难度降低很多。

求解过程

统计图中点度数

v 11 v_{11} v11 的度数为 2 2 2
v 12 v_{12} v12 的度数为 3 3 3
v 13 v_{13} v13 的度数为 3 3 3
v 14 v_{14} v14 的度数为 3 3 3
v 15 v_{15} v15 的度数为 3 3 3
v 16 v_{16} v16 的度数为 2 2 2
v 21 v_{21} v21 的度数为 3 3 3
v 22 v_{22} v22 的度数为 4 4 4
v 23 v_{23} v23 的度数为 4 4 4
v 24 v_{24} v24 的度数为 4 4 4
v 25 v_{25} v25 的度数为 4 4 4
v 26 v_{26} v26 的度数为 3 3 3
v 31 v_{31} v31 的度数为 3 3 3
v 32 v_{32} v32 的度数为 4 4 4
v 33 v_{33} v33 的度数为 4 4 4
v 34 v_{34} v34 的度数为 4 4 4
v 35 v_{35} v35 的度数为 4 4 4
v 36 v_{36} v36 的度数为 3 3 3
v 41 v_{41} v41 的度数为 3 3 3
v 42 v_{42} v42 的度数为 4 4 4
v 43 v_{43} v43 的度数为 4 4 4
v 44 v_{44} v44 的度数为 4 4 4
v 45 v_{45} v45 的度数为 4 4 4
v 46 v_{46} v46 的度数为 3 3 3
v 51 v_{51} v51 的度数为 3 3 3
v 52 v_{52} v52 的度数为 4 4 4
v 53 v_{53} v53 的度数为 4 4 4
v 54 v_{54} v54 的度数为 4 4 4
v 55 v_{55} v55 的度数为 4 4 4
v 56 v_{56} v56 的度数为 3 3 3
v 61 v_{61} v61 的度数为 2 2 2
v 62 v_{62} v62 的度数为 3 3 3
v 63 v_{63} v63 的度数为 3 3 3
v 64 v_{64} v64 的度数为 3 3 3
v 65 v_{65} v65 的度数为 3 3 3
v 66 v_{66} v66 的度数为 2 2 2

配对

图中,奇点有: v 12 , v 13 , v 14 , v 15 , v 21 , v 26 , v 31 , v 36 , v 41 , v 46 , v 51 , v 56 , v 62 , v 63 , v 64 , v 65 v_{12},v_{13},v_{14},v_{15},v_{21},v_{26},v_{31},\\v_{36},v_{41},v_{46},v_{51},v_{56},v_{62},v_{63},v_{64},v_{65} v12,v13,v14,v15,v21,v26,v31,v36,v41,v46,v51,v56,v62,v63,v64,v65,合计 16 16 16 个。
把他们配对,枚举所有配对,找到代价最小的配对。
由于本题的权值相同,因此,最小配对为 ( v 12 , v 13 ) , ( v 14 , v 15 ) ( v 21 , v 31 ) , ( v 26 , v 36 ) , ( v 41 , v 51 ) , ( v 46 , v 56 ) , ( v 62 , v 63 ) , ( v 64 , v 65 ) (v_{12},v_{13}),(v_{14},v_{15})(v_{21},v_{31}),(v_{26},v_{36}),\\(v_{41},v_{51}),(v_{46},v_{56}),(v_{62},v_{63}),(v_{64},v_{65}) (v12,v13),(v14,v15)(v21,v31),(v26,v36),(v41,v51),(v46,v56),(v62,v63),(v64,v65)

添加重边,去掉奇点

如下图所示,红色为添加的边。
在这里插入图片描述
这样,新图中没有奇点,是一个欧拉图。
注意,将原来图中节点编号按照顺序进行修改,主要是为了计算机编程方便。

答案

最短路径

最短距离 ( 60 + 8 ) ∗ 500 = 34 , 000 m (60+8)*500=34,000m (60+8)500=34,000m,其中 60 60 60 为原有路径, 8 8 8 为构造欧拉图增加的路径。

方案

10 → 4 → 3 → 2 → 1 → 7 → 8 → 2 → 3 → 9 → 8 → 14 → 13 → 7 → 13 → 19 → 20 → 14 → 15 → 9 → 10 → 11 → 5 → 4 → 5 → 6 → 12 → 11 → 17 → 16 → 15 → 21 → 20 → 26 → 25 → 19 → 25 → 31 → 32 → 26 → 27 → 21 → 22 → 23 → 17 → 18 → 12 → 18 → 24 → 23 → 29 → 28 → 27 → 33 → 32 → 33 → 34 → 35 → 29 → 30 → 24 → 30 → 36 → 35 → 34 → 28 → 22 → 16 → 10 10\to 4\to 3\to 2\to 1\to 7\to 8\to 2\to 3\to 9\to 8\to 14\to\\ 13\to 7\to 13\to 19\to 20\to 14\to 15\to 9\to 10\to 11\to 5\to\\ 4\to 5\to 6\to 12\to 11\to 17\to 16\to 15\to 21\to 20\to 26\to\\ 25\to 19\to 25\to 31\to 32\to 26\to 27\to 21\to 22\to 23\to\\ 17\to 18\to 12\to 18\to 24\to 23\to 29\to 28\to 27\to 33\to 32\to\\ 33\to 34\to 35\to 29\to 30\to 24\to 30\to 36\to 35\to 34\to\\ 28\to 22\to 16\to 10 10432178239814137131920141591011545612111716152120262519253132262721222317181218242329282733323334352930243036353428221610
注意:答案不唯一。

C++代码

#include<bits/stdc++.h>
using namespace std;const int N=1e3+10;
int edge[N][N];
//为了方便优先访问编号小的节点,这里使用邻接矩阵来存边
//如果使用vector来存图,那还需要对每个节点连接的边进行排序
int ans[N*N];
int p=0;//ans指针 
int degree[N];//用于储存每个点的度,以求起点
int n;//节点数量 void dfs(int now) {for (int i=1;i<=n;i++){//顺序寻找可访问的边,优先找编号小的节点if (edge[now][i]){//若这条边尚未访问过edge[now][i]--;//已访问过的边要删去,防止重复访问edge[i][now]--;//有向图的话请删去这一行dfs(i);}}ans[++p]=now;//将访问的节点储存进答案数组//由于递归的特性,这里储存的是逆序过程
}int main() {ios::sync_with_stdio(false);int m;//边的个数cin>>n>>m;for(int i=1;i<=m;i++) {int a,b;cin>>a>>b>>c;edge[a][b]++;edge[b][a]++;//有向图的话删去这行degree[a]++;degree[b]++;//两个点的度都+1}int start;//起点 cin>>start;dfs(start);//dfs寻找欧拉路cout<<(p-1)*500<<"\n";//计算总代价 for(int i=p;i>=1;i--) {cout<<ans[i]<<" ";//输出给定的欧拉路}cout<<"\n";return 0; 
}

对应的测试数据如下。

36 68
1 2 500
2 3 500
2 3 500
3 4 500
4 5 500
4 5 500
5 6 500
1 7 500
2 8 500
3 9 500
4 10 500
5 11 500
6 12 500
7 8 500
8 9 500
9 10 500
10 11 500
11 12 500
7 13 500
7 13 500
8 14 500
9 15 500
10 16 500
11 17 500
12 18 500
12 18 500
13 14 500
14 15 500
15 16 500
16 17 500
17 18 500
13 19 500
14 20 500
15 21 500
16 22 500
17 23 500
18 24 500
19 20 500
20 21 500
21 22 500
22 23 500
23 24 500
19 25 500
19 25 500
20 26 500
21 27 500
22 28 500
23 29 500
24 30 500
24 30 500
25 26 500
26 27 500
27 28 500
28 29 500
29 30 500
25 31 500
26 32 500
27 33 500
28 34 500
29 35 500
30 36 500
31 32 500
32 33 500
32 33 500
33 34 500
34 35 500
34 35 500
35 36 500
1

http://chatgpt.dhexx.cn/article/oVRaUcjo.shtml

相关文章

邮递员算法问题之c++实现

目录 前言演示问题介绍思路代码复现尾言 前言 大家好&#xff0c;我是Ericam_。 近些时间&#xff0c;通过一个项目接触到了邮递员算法问题&#xff0c;还是挺有意思的&#xff08;虽然做起来经历了不少的困难&#xff09;。最后勉强复现了吧&#xff0c;写个文章就当记录一下。…

中国邮递员问题+代码实现(cpp)

中国邮递员问题是一个和旅行商问题比较相关但又不太相同的一个问题&#xff0c;而且个人感觉理解的难度更大一点&#xff0c;当然&#xff0c;这就是仁者见仁&#xff0c;智者见智了&#xff0c;旅行商问题是不能回头的&#xff0c;一个节点访问过了不能回来了&#xff0c;并不…

离散数学实验----中国邮递员问题

实验目的和要求 实验目的&#xff1a; 理解什么是欧拉图&#xff0c;熟悉欧拉路和欧拉回路的概念。掌握Dijkstra算法&#xff0c;求解最短路径掌握Fleury算法&#xff0c;求解欧拉回路。了解Edmonds-Johnson算法解决中国邮递员问题的基本思路。通过程序实现中国邮递员问题&…

数据结构——中国邮递员问题

问题描述 代码 #include <stdio.h> #include <stdlib.h> #include <string.h>#define min(a,b) ( (a) < (b) ? (a) : (b) ) #define MAX_NODE 100 #define MAX_EDGE 100 #define INF 0x7fffffff // 表示两点不连通typedef struct {int number; …

[算法导论] 邮递员问题

邮递员问题 旅行商问题&#xff1a;给定一系列城市和每对城市之间的距离&#xff0c;求解访问每一座城市一次并回到起始城市的最短回路。&#xff08;遍历点&#xff0c;回到起点&#xff09; 哈密顿路径 哈密顿图 中国邮递员问题&#xff1a;邮差要设法找到一条最短路径&…

中国邮递员问题的深入剖析与算法实现(附例题及MATLAB、LINGO代码)

中国邮递员问题的深入剖析与算法实现 一、研究背景1.1 哥尼斯堡七桥问题1.2 欧拉图1.3 中国邮递员问题 二、中国邮递员问题深入解读2.1 问题重述2.2 奇偶点图上作业法[^1]2.3 最小二分匹配法1) 针对无向图2) 针对有向图 2.4 $fleury$算法 三、经典中国邮递员问题的具体实现3.1 …

中国邮路算法(中国邮递员问题)(详细)

通路&#xff1a;在无向图中由点边交替组成的序列就是通路&#xff08;如果这个图是简单的&#xff0c;那么也可以使用点的序列来表示&#xff09;&#xff0c;如果首尾的点相同&#xff0c;则称为一条回路 无向图的连通性&#xff1a;无向图中任意一对点之间均有通路 欧拉通路…

那些有趣的网站

之前分享过那些有意思的网站 &#xff0c;这里继续分享一波&#xff0c;也许你用得上。 福利单词 一边背单词一边看妹子的网站&#xff0c;用电脑打开&#xff0c;配合ctrlw 关闭新窗口&#xff0c;不知不觉就背了百来个词了 https://easychen.gitee.io/foxdict/ 工资计算器 简…

常用又有趣的网站大合集

〇、【Python challenge】通关代码及攻略 一、PIECES 拼图 PIECES 拼图网站用 30 个 CSS 碎片进行拼图&#xff0c;向我们呈现了 30 种濒临灭绝的动物。 二、小甲鱼编程学习工作室 包含了各种编程语言学习以及计算机基本操作的教学与奇技淫巧 三、Wolfram Alpha 这是由Wol…

超酷的13个CSS有趣学习网站

13个CSS有趣学习网站 今天来给大家推荐13个辅助你学习巩固知识的网站&#xff0c;让你边玩边学边记&#xff01; 因为这些网站大多都是国外的大佬们做的&#xff0c;所以网页大多都是英文&#xff0c;为了更好地使用&#xff0c;给你们推荐两个翻译的方式&#xff1a; 使用C…

电脑技巧:盘点10个非常实用且有趣的网站

目录 1、聆听大海的声音 2、在线生成Logo 3、今日热榜 4、十万个为什么&#xff08;大人版&#xff09; 5、视频创作导航 6、改图鸭 7、好看电影推荐 8、童年游戏合集 9、各种沙雕表情包 10、反向词典 今天给大家分享10个非常实用且有趣的网站&#xff0c;值得收藏&a…

科普:如何找到有趣的网站?

原址&#xff1a;http://shedingkong.lofter.com/post/302b9d_1943cf2# 其实我发各种网站的推荐&#xff0c;是为了给自己留用&#xff0c;也是因为现在的审查环境下&#xff0c;各种下载资源的分享十分痛苦。总有人问我怎么知道这么多网站&#xff0c;这里来介绍几种方法。 方…

你是否看到过如此有趣的AI网站?

1、营销文案&#xff1a;CopyAI: Create Marketing Copy In Seconds 2、美化ppt设计&#xff1a;https://www.beautiful.ai/ 3、图片修改&#xff1a;https://hotpot.ai 4、照片变视频&#xff1a;https://www.myheritage.com/deep-nostalgia 美化头像&#xff1a;Free Profil…

有趣好玩的python编程网站

✅作者简介&#xff1a;大家好我是hacker707,大家可以叫我hacker &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;python &#x1f4ac;推荐一款模拟面试、刷题神器&#x1f449;点击跳转进入网站 整理了一些非常有意思&#xff0c;适…

有趣的表白网站

今天看到一个傻瓜式的表白网址生成网站&#xff0c;觉得还挺有意思的&#xff0c;所以来分享一下。http://www.51bbw.cn/show/ 进入网址就会看到下面的界面&#xff1a; 然后就可以“量力而行”了&#xff0c;依据财力选择你想制作的模板&#xff0c;老白嫖怪一眼看中了“免费…

有趣的网站

黑客帝国文字雨生成器 AirPano 足不出户的旅行 创客贴 自媒体制图神器

实时查看Starlink在轨卫星、地面站数目和分布情况的有趣网站

记录一些SpaceX的Starlink相关的一些有趣有用小网站~ 一、实时查看Starlink在轨卫星数目和分布情况 https://satellitemap.space/ 除了可以看Starlink的&#xff0c;还可以看OneWeb和GPS的在轨卫星和分布情况&#xff1b; 截止到2022-4-23&#xff0c;共有卫星2283颗&#xf…

收藏全球最有趣的网站 (上)

在线玩转指尖陀螺-FFFFidget ←点击评分&#xff0c;有趣指数&#xff1a; 3.40星 风靡全球的指间小玩具&#xff01;网站可以在线体验指尖陀螺的迷之旋转&#xff0c;同时支持PC和移动端&#xff0c;手机玩起来更带感&#xff01; 传送门 http://ffffidget.com/ 继续阅读 →…

几个有创意有趣的网站推荐

几个有趣的网站推荐&#xff0c;这些网站很有创意&#xff0c;第一眼就很惊艳 都能打开&#xff0c;不过速度有点慢&#xff0c;一定要有耐心等待&#xff0c;因为有几个是国外的网站&#xff0c;如果是在手机上打开的&#xff0c;复制地址进浏览器 1、Marco Gomez &#xff0d…

记录一些有趣网站

https://css-tricks.com/ 2018.01.15更 腾讯游戏官方设计团队 http://tgideas.qq.com/?ADTAGmedia.gameweb.console 2018.01.16更 该文档库&#xff1a;http://tgideas.qq.com/doc/ 里面有个相关的一些干货 王者荣耀网站帮助管理平台 https://pvp.qq.com…