当前位置: 首页 > news >正文

图论---无向图中国邮路的实现

开始编程前分析设计思路和程序的整体的框架,以及作为数学问题的性质:

程序流程图:

数学原理:

        本质上是找到一条欧拉回路,考虑图中的边权重、顶点的度数以及如何通过添加最少的额外边来构造欧拉回路,涉及到欧拉回路、最短路径算法以及奇点匹配。

时间复杂度分析:

        程序的时间复杂度主要来自于Floyd算法和ADD函数。Floyd是动态规划算法。它的时间复杂度是O(n^3)。 ADD函数是一个递归函数它的时间复杂度是O(2^n),其中n是奇点的数量。在最坏情况下,奇点的数量可能接近于节点的数量,ADD函数的时间复杂度可能接近于O(2^n)。综合看,这段程序的时间复杂度是O(n^3 + 2^n)。由于2^n的增长速度非常快,当n较大时,2^n将远大于n^3,因此这段程序的时间复杂度应该为O(2^n)

源代码:

#include <stdio.h>
#include <bits.h>
// 定义常量
const int N = 105;
const int inf = 100000000;
// 建立矩阵和路径数组
int matrix[N][N], mapp[N][N];
int p[N][N];
int path[N], d[N];
int sg[N];
int cont[N];
int vis[N];
int n, m;
int top;
// 设置结构体将边和权重关联
struct node
{int v, u, cost;
} gg[N];
// 使用深度优先递归搜索
void DFS(int beg)
{for (int i = 1; i <= n; i++){if (matrix[beg][i]){matrix[beg][i]--;matrix[i][beg]--;DFS(i);}}path[top++] = beg;
}
void Fleury(int beg)
{top = 0;DFS(beg);
}
// 寻找最短路径
void Floyed()
{for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){for (int k = 1; k <= n; k++){if (mapp[i][j] > mapp[i][k] + mapp[k][j]){p[i][j] = k;mapp[i][j] = mapp[i][k] + mapp[k][j];}}}}
}
// 通过递归对奇数边进行加边
int ADD(int cn)
{ // 将奇点进行匹配得一个最小的int ans = inf;if (cn < 2)return 0; // 奇点个数小于2,无需匹配。for (int i = 1; i <= cn; i++){if (sg[i] != 0){for (int j = i + 1; j <= cn; j++){if (sg[j] != 0){int tem1 = sg[i], tem2 = sg[j];sg[i] = 0;sg[j] = 0;if (ans > ADD(cn - 2) +mapp[tem1][tem2]){
// 第i个奇点匹配的奇点是第j个奇点cont[i] = tem2; 
// 第j个奇点匹配的奇点是第i个奇点cont[j] = tem1; ans = ADD(cn - 2)+mapp[tem1][tem2];}sg[i] = tem1;sg[j] = tem2;}}}}return ans;
}
// 将找到的路径存储
void AddPath(int cn)
{memset(vis, 0, sizeof(vis));for (int i = 1; i <= cn; i++){if (!vis[sg[i]]){vis[sg[i]] = 1;vis[cont[i]] = 1;while (p[sg[i]][cont[i]]){int sss = cont[i];cont[i] = p[sg[i]][cont[i]];matrix[sss][cont[i]]++;matrix[cont[i]][sss]++;}matrix[sg[i]][cont[i]]++;matrix[cont[i]][sg[i]]++;}}
}
// 输出路径
void Print_Path()
{printf("top=%d\n", top);for (int i = top - 1; i >= 0; i--){printf("%d", path[i]);if (i)printf("->");}puts("");
}
//初始化各边信息
void Inif()
{for (int i = 0; i <= N; i++){for (int j = 0; j <= N; j++){mapp[i][j] = (i == j) ? 0 : inf;}}
}
// 中国邮路信息建立
void CNLoad()
{while (~scanf("%d%d", &n, &m)){Inif();int i, beg, sum = 0; // sum用来计算路径长度memset(matrix, 0, sizeof(matrix));memset(d, 0, sizeof(d));memset(sg, 0, sizeof(sg));memset(path, 0, sizeof(path));memset(p, 0, sizeof(p));memset(cont, 0, sizeof(cont));// 存储各边信息for (i = 1; i <= m; i++){int a, b, c;scanf("%d%d%d", &a, &b, &c);d[a]++;d[b]++;matrix[a][b] = 1;matrix[b][a] = 1;mapp[a][b] = c;mapp[b][a] = c;gg[i].v = a;gg[i].u = b;gg[i].cost = c;sum += c;}beg = 1;int cnt = 0;for (i = 1; i <= n; i++){if (d[i] & 1){cnt++;sg[cnt] = i;beg = i;}}if (!cnt){printf("sum=%d\n", sum);Fleury(beg);Print_Path();}else{Floyed();printf("sum=%d\n", sum + ADD(cnt));AddPath(cnt);Fleury(beg);Print_Path();}}
}
int main()
{CNLoad();return 0;
}

测试用例:(图结构)

输出结果:

相关文章:

图论---无向图中国邮路的实现

开始编程前分析设计思路和程序的整体的框架&#xff0c;以及作为数学问题的性质&#xff1a; 程序流程图&#xff1a; 数学原理&#xff1a; 本质上是找到一条欧拉回路&#xff0c;考虑图中的边权重、顶点的度数以及如何通过添加最少的额外边来构造欧拉回路&#xff0c;涉及到欧…...

Rockchip RK3588 - Rockchip Linux SDK脚本分析

---------------------------------------------------------------------------------------------------------------------------- 开发板 &#xff1a;ArmSoM-Sige7开发板eMMC &#xff1a;64GBLPDDR4 &#xff1a;8GB 显示屏 &#xff1a;15.6英寸HDMI接口显示屏u-boot &a…...

【C++中resize和reserve的区别】

1. resize的用法 改变当前容器内含有元素的数量&#xff08;size()&#xff09;比如&#xff1a; vector<int> vct;int num vct.size();//之前的元素个数为num vct.resize(len);//现在的元素个数为len如果num < len &#xff0c;那么容器vct新增len - num个元素&am…...

计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

本论文的主要研究内容如下&#xff1a; 了解基于Spark的TapTap游戏数据分析系统的基本架构&#xff0c;掌握系统的开发方法&#xff0c;包括系统开发基本流程、开发环境的搭建、测试与运行等。 主要功能如下&#xff1a; &#xff08;1&#xff09;用户管理模块&#xff1a…...

Python面试题:如何在 Python 中进行正则表达式操作?

在 Python 中&#xff0c;正则表达式操作可以通过 re 模块来实现。以下是一些常用的正则表达式操作和示例&#xff1a; 1. 导入模块 import re2. 常见操作和示例 a. 匹配 使用 re.match() 来检查字符串的开头是否匹配某个模式。 pattern r\d # 匹配一个或多个数字 strin…...

C#面:简述什么是中间件(Middleware)?

中间件是组装到应⽤程序管道中以处理请求和响应的软件。 每个组件&#xff1a; 选择是否将请求传递给管道中的下⼀个组件。 可以在调⽤管道中的下⼀个组件之前和之后执⾏⼯作。 请求委托&#xff08;Request delegates&#xff09;⽤于构建请求管道&#xff0c;处理每个HTTP请…...

AWS Glue 与 Amazon Redshift 的安全通信配置

1. 引言 在 AWS 环境中,确保服务间的安全通信至关重要。本文将探讨 AWS Glue 与 Amazon Redshift 之间的安全通信配置,特别是为什么需要特定的安全组设置,以及如何正确实施这些配置。 2. 背景 AWS Glue:全托管的 ETL(提取、转换、加载)服务Amazon Redshift:快速、完全…...

nginx访问控制

最近部署consul服务&#xff0c;发现consul认证配置比较麻烦&#xff0c;于是上网查询发现nginx支持路由认证&#xff0c;在此做个记录。 1.Nginx访问控制模块类型 基于IP的访问控制&#xff1a;http_access_module基于用户的信任登录&#xff1a;http_auth_basic_module 2.…...

高效应对网络攻击,威胁检测响应(XDR)平台如何提升企业应急响应能力

在数字化时代&#xff0c;企业面临的网络攻击威胁持续增加&#xff0c;如恶意软件、勒索软件、钓鱼攻击、DDoS攻击等。这些威胁不仅危及企业数据安全、系统稳定&#xff0c;还损害了品牌形象和市场信任。随着云计算、大数据、物联网的广泛应用&#xff0c;企业网络攻击面扩大&a…...

多线程问题

什么是线程 线程是cpu调度和执行的单位&#xff0c;一个程序的运行伴随着的是一个进程的执行&#xff0c;而一个进程是由一个或多个线程来完成的&#xff0c;通过cpu调度资源在很短时间切换主线程和子线程并行&#xff0c;交替执行来做到看似多个线程同时进行的状态&#xff0…...

自动优化:SQL Server数据库自动收缩配置指南

自动优化&#xff1a;SQL Server数据库自动收缩配置指南 在数据库管理中&#xff0c;随着数据的增删&#xff0c;数据库文件的大小会不断变化&#xff0c;导致空间浪费和性能下降。SQL Server提供了自动收缩功能&#xff0c;帮助数据库文件保持最佳状态。本文将深入探讨如何在…...

华为机考真题 -- 密码解密

题目描述&#xff1a; 给定一段"密文"字符串 s, 其中字符都是经过"密码本"映射的&#xff0c;现需要将"密文"解密并且输出映射的规则 &#xff08;a - i)分别用(1 - 9)表示&#xff1b;(j - z)分别用(10* - 26*)表示约束&#xff1a;映射始终唯…...

ScrapySharp框架:小红书视频数据采集的API集成与应用

引言 随着大数据时代的到来&#xff0c;数据采集成为了互联网企业获取信息的重要手段。小红书作为一个集社交和电商于一体的平台&#xff0c;其丰富的用户生成内容&#xff08;UGC&#xff09;为数据采集提供了丰富的资源。本文将介绍如何使用ScrapySharp框架进行小红书视频数…...

PostgreSQL 数据库监控项

在维护和优化 PostgreSQL 数据库时&#xff0c;采集并监控数据库的各种静态和动态指标非常重要。这些指标包括数据库的配置信息、资源使用情况、性能指标等&#xff0c;能够帮助数据库管理员及时发现并解决潜在的问题&#xff0c;从而提高数据库的稳定性和性能。本文提供了一系…...

用python生成词频云图(python实例二十一)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.词频云图 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&a…...

HTML 标签简写和全称及其对应的中文说明和实例

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTML 标签简写及全称</title><style>…...

(2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)

前言 本系列最初的想法就是搭建一个多项目的环境, 包含nginx, nodejs, php, html, redis, MongoDB, mysql.本文使用的PHP镜像为php:7.3.6-apache, 这里可以使用上一篇文章中生成好的镜像.LAMP或包含react或vue的前端项目, 本文就各写了一个, 可以按照实际需求, 自行添加多个容…...

全网最适合入门的面向对象编程教程:13 类和对象的 Python 实现-可视化阅读代码神器 Sourcetrail 的安装使用

全网最适合入门的面向对象编程教程&#xff1a;13 类和对象的 Python 实现-可视化阅读代码神器 Sourcetrail 的安装使用 摘要&#xff1a; 本文主要介绍了可视化阅读代码神器Sourcetrail的安装与使用&#xff0c;包括软件简介和特性、下载地址、安装方式、新建工程和如何查看…...

Django 视图 - FBV 与 CBV

Django 视图 - FBV 与 CBV 在 Django 框架中&#xff0c;视图是处理 Web 请求和返回 Web 响应的核心组件。Django 提供了两种主要的视图编写方式&#xff1a;函数基础视图&#xff08;Function-Based Views&#xff0c;简称 FBV&#xff09;和类基础视图&#xff08;Class-Bas…...

AI机器人在未来的应用场景预测:是否会取代人类?华为、百度、特斯拉他们在AI领域都在做什么?

引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI机器人在各个领域的应用变得越来越普遍。从工业自动化到日常生活&#xff0c;AI机器人已经开始展现出强大的潜力和实际应用价值。本文将深入探讨AI机器人在未来的应用场景&#xff0c;并分析它们是否…...

硕士论文AI率要求15%以下,用嘎嘎降AI一次过的经验

硕士论文AI率要求15%以下&#xff0c;用嘎嘎降AI一次过的经验 答辩前一周&#xff0c;导师突然甩来一句&#xff1a;“学校新规&#xff0c;硕士论文AI率15%以下才能送审。” 我当时心态直接崩了。我那篇三万字的研究生论文&#xff0c;从文献综述到实验方法&#xff0c;全是我…...

手把手教你用Matlab/Simulink搭建VSG虚拟阻抗模型,搞定新能源并网振荡难题

新能源并网VSG虚拟阻抗控制实战&#xff1a;从Simulink建模到振荡抑制 电力电子工程师们正面临一个棘手难题——新能源并网系统中的宽频振荡。当构网型变流器&#xff08;GFM&#xff09;在强电网环境下运行时&#xff0c;次同步和超同步频段的负阻尼特性可能导致系统失稳。虚拟…...

5个技巧让LyricsX成为你的Mac音乐必备工具

5个技巧让LyricsX成为你的Mac音乐必备工具 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 你是否曾在Mac上听音乐时&#xff0c;因为没有桌面歌词而无法跟着哼唱&#xf…...

KV260实战:从PYNQ安装到跑通第一个AI例程,手把手带你玩转边缘AI开发板

KV260边缘AI开发实战&#xff1a;从PYNQ部署到图像分类全流程指南 当你第一次拿到KV260开发板时&#xff0c;可能会被它小巧的外表所迷惑——这块巴掌大的开发板实际上搭载了赛灵思的Kria K26 SOM系统模块&#xff0c;内含可编程逻辑和四核ARM Cortex-A53处理器&#xff0c;专为…...

Chatbot Arena 排行榜解析:如何为你的聊天机器人优化性能

作为一名刚接触聊天机器人开发的开发者&#xff0c;你可能和我一样&#xff0c;面对琳琅满目的模型和框架感到无从下手。这时候&#xff0c;一个客观、公正的“考场”就显得尤为重要。Chatbot Arena 正是这样一个平台&#xff0c;它通过众包用户进行匿名、随机的模型对战&#…...

基于模型预测控制(MPC)的二自由度机械臂控制仿真模型复现与验证:[文献复现]的实践与结果分析

基于模型预测MPC的二自由度机械臂控制仿真模型【复现】 [1]参考文献&#xff1a;《Model predictive control of a two-link robot arm 》 [2]仿真完全参考给的文献搭建&#xff0c;波形与文献的基本一致二自由度机械臂的MPC控制总带着点"用未来预测现在"的玄学色彩。…...

TranslucentTB:打造高效个性化Windows任务栏的3大核心价值与实践指南

TranslucentTB&#xff1a;打造高效个性化Windows任务栏的3大核心价值与实践指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Windows…...

vLLM-v0.17.1开发者案例:VS Code插件集成vLLM实现本地代码补全

vLLM-v0.17.1开发者案例&#xff1a;VS Code插件集成vLLM实现本地代码补全 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;最新发布的v0.17.1版本带来了多项性能优化和功能增强。这个开源项目最初由加州大学伯克利分校的天空计算实验…...

IEEE论文LaTeX排版技巧(十一)| 尾页双栏平衡优化实战指南

1. 为什么尾页双栏平衡如此重要&#xff1f; 当你熬夜改完论文准备提交时&#xff0c;有没有发现最后一页的两栏长度总是不对称&#xff1f;左边栏挤得满满当当&#xff0c;右边栏却空出一大截&#xff0c;这种视觉上的不平衡会直接影响评审专家对你论文的第一印象。我在审阅学…...

BGE-Large-Zh在游戏行业的应用:玩家反馈语义分析

BGE-Large-Zh在游戏行业的应用&#xff1a;玩家反馈语义分析 1. 引言 在游戏行业&#xff0c;玩家反馈是宝贵的资源&#xff0c;但面对海量的评论、论坛帖子和客服对话&#xff0c;人工处理往往力不从心。传统的关键词匹配方法只能捕捉表面信息&#xff0c;无法理解玩家真正的…...