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

news2024/12/25 9:15:20

题目

严老师和宋老板去勘测武威市区的道路网,每一条路都需要勘测,且需要两人合作.武威市区可以近似地看成六横六纵组成的道路网,自西向东依次为学府路、民勤路、西关路、中关路、富民路、滨河路;自北向南依次为雷海路、宣武路、祁连大道、商业街、南关路、古浪街,任意两个相邻的路口之间的间距均可以认为是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://www.coloradmin.cn/o/530767.html

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

相关文章

Redis基本数据类型及使用(2)

书接上回&#xff0c;这节讲讲其余的基本数据结构使用 集合&#xff0c;有序集合以及遍历和事务的使用 Set集合&#xff0c;无序不重复的成员 表现形式&#xff1a; key1string1string2key2string1string2 常用的基本操作&#xff1a; sadd key string1 [string2..]添加1…

第二十届宁波大学程序设计竞赛(同步赛)

A-0-1翻转_第二十届宁波大学程序设计竞赛&#xff08;同步赛&#xff09; (nowcoder.com) 思路&#xff1a; 我们观察发现&#xff0c;奇数位与偶数位的1每次操作一定时同时增加或者减少的&#xff0c;我们无法做到同时删除奇数位的两个1.。不满足相等则情况无解那么&#xf…

【谷粒商城之订单服务-支付】

本笔记内容为尚硅谷谷粒商城订单服务支付部分 目录 一、支付宝沙箱 沙箱环境 二、公钥、私钥、加密、加签、验签 1、公钥私钥 2、加密和数字签名 3、对称加密和非对称加密 三、内网穿透 四、整合支付 1、导入支付宝SDK依赖 2、封装工具类和PayVo 3、前端访问支付接…

python汉诺塔编程代码

汉诺塔问题是一个经典的递归问题。以下是使用Python实现汉诺塔的一个简单方法&#xff1a; python def hanoi(n, source, target, auxiliary): if n > 0: # 把 n-1 个盘子从 source 移动到 auxiliary hanoi(n-1, source, auxiliary, target) # 把第 n 个盘子从 source 移动到…

三十四、服务治理、实现负载均衡、

1、服务治理介绍 先来思考一个问题 通过上一章的操作&#xff0c;我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 &#xff08;ip&#xff0c;端口&#xff09;等硬编码到了代码中&#xff0c;这种做法存在许多问题&#xff1a; l 一旦服务提供者地址变化…

浪潮之巅第一章 — 帝国的余辉(ATT)(一) 阅读笔记

在这十几年间&#xff0c;它们代表着科技的浪潮&#xff0c;直到下一波浪潮的来临。 从一百年前算起&#xff0c;AT&T 公司、IBM 公司、苹果公司 (Apple)、英特尔 (Intel) 公司、微软 (Microsoft) 公司、思科公司 (Cisco) 公司、雅虎 (Yahoo) 公司和谷歌 (Google) 公司都先…

相见恨晚的Matlab编程小技巧(2)-代码怎么做到逻辑清晰?——巧用注释符“%“

本文将以教程的形式详细介绍Matlab中两个常用符号“%”和“%%”的作用。初学者可以通过此文掌握这两个符号的用法&#xff0c;为Matlab编程打下坚实的基础。 一、什么是“%”符号&#xff1f; 在 Matlab 中&#xff0c;“%” 符号是注释符号&#xff0c;它后面的文本被视为注释…

GEE:下载MODIS海表温度影像

作者:CSDN @ _养乐多_ 本篇博客将介绍如何使用Google Earth Engine(GEE)平台下载MODIS(Moderate Resolution Imaging Spectroradiometer)海表温度影像数据。MODIS是一种遥感传感器,用于监测地球表面的温度变化。我们将展示如何获取MODIS数据集,并选择特定感兴趣区域进行…

C#操作Redis明细内容 C#调用redis c#使用redis业务 C# Redis操作类 C#中Redis封装的类 C#和Redis客户端

谈下你对 Redis 的了解&#xff1f; 1&#xff09;Redis是一种基于键值对的NoSQL数据库&#xff08;非关系型数据库&#xff09;&#xff1b;是一个key-value存储系统 2&#xff09;高性能、可靠性 Redis将数据存储在内存中&#xff0c;读写性能高&#xff1b;Redis提供了 R…

第四十天学习记录:C语言进阶:笔试题整理Ⅰ

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main() {unsigned long pulArray[] { 6,7,8,9,10 };unsigned long* pulPtr;pulPtr pulArray;*(pulPtr 3) 3;printf("%d,%d\n", *pulPtr, *(pulPtr 3));//6 12return 0; }输出&#xff1a;6&#…

哈工大软件过程与工具作业1(100以内加减法练习小软件)

softwareProcess-lab1-master 哈工大软件过程与工具作业1 100以内加减法练习小软件 地址&#xff1a;https://github.com/944613709/Addition-and-subtraction-practice-small-software 项目概述 &#xff08;1&#xff09;项目名称&#xff1a;100以内加减法练习小软件 &…

一图看懂 markupsafe 模块:为 Python 实现 XML/HTML/XHTML 标记安全字符串,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 markupsafe 模块&#xff1a;为 Python 实现 XML/HTML/XHTML 标记安全字符串&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图…

【JAVA】Java中的类型转换

目录 1.自动类型转换&#xff08;隐式转换&#xff0c;小类型转换为大类型&#xff09; 2.强制类型转换&#xff08;显示转换&#xff0c;大类型转换为小类型&#xff09; 3.小于4字节的类型转换问题 3.1 byte<->int 3.2 char<->int 3.3 String<->int …

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-4

深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践-总结-4 垃圾收集器与内存分配策略经典垃圾收集器Serial Old收集器CMS收集器Garbage First收集器 垃圾收集器与内存分配策略 经典垃圾收集器 Serial Old收集器 Serial Old是Serial收集器的老年代版本&#xff0c;它同样…

Liunx基础命令 - find命令

find命令 – 根据路径和条件搜索指定文件 find命令的功能是用于根据给定的路径和条件查找相关文件或目录&#xff0c;参数灵活方便&#xff0c;且支持正则表达式&#xff0c;结合管道符后能够实现更加复杂的功能&#xff0c;是Linux系统运维人员日常工作必须掌握的命令之一。 …

跟小枫社长学建站

该文章为看视频时的一些笔记&#xff0c;完整版可以看小枫社长的视频 小枫社长视频原址 一、租云服务器 腾讯云阿里云 阿里云对控制台进行了全面升级&#xff0c;在首页使用了新的设计方案&#xff0c;云服务器ECS位置如下&#xff0c;点击左上角目录即可。 二、创建实例 云…

牛客网面试必刷:BM22 比较版本号

牛客网面试必刷&#xff1a;BM22 比较版本号 前言一、解法1&#xff1a;分割截取 前言 牛客项目发布项目版本时会有版本号&#xff0c;比如1.02.11&#xff0c;2.14.4等等 现在给你2个版本号version1和version2&#xff0c;请你比较他们的大小 版本号是由修订号组成&#xf…

三十三、微服务,SpringCloud架构

1、微服务架构 1.1 单体应用架构 将项目所有模块(功能)打成jar或者war&#xff0c;然后部署一个进程 优点: 1:部署简单:由于是完整的结构体&#xff0c;可以直接部署在一个服务器上即可。 2:技术单一:项目不需要复杂的技术栈&#xff0c;往往一套熟悉的技术栈就可以完成开发。…

JAVA8的新特性——Stream

JAVA8的新特性——Stream 在这个深夜写下这篇笔记&#xff0c;窗外很安静&#xff0c;耳机里是《季节更替》&#xff0c;我感触还不是很多&#xff0c;当我选择封面图片的时候才发现我们已经渐渐远去&#xff0c;我们都已经奔赴生活&#xff0c;都在拼命想着去换一个活法&#…

Kubernetes 二进制部署高可用集群

概述 在私有局域网内完成Kubernetes二进制高可用集群的部署 ETCD Openssl > ca 证书 Haproxy Keepalived Kubernetes 主机规划 序号名字功能VMNET 1备注 1备注 2备注 3 备注 4备注 50orgin界面192.168.164.10haproxykeepalived1reporsitory仓库192.168.164.16yum 仓库re…