第十部分 欧拉图与哈密顿图

2023-12-26 15:36
文章标签 部分 欧拉 哈密顿 第十

本文主要是介绍第十部分 欧拉图与哈密顿图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欧拉图:
历史背景:
哥尼斯堡七桥问题与欧拉图

问题提出后,很多人对此很感兴趣,纷纷进行试验,但在相当长的时间里,始终未能解决。而利用普通数学知识,每座桥均走一次,那这七座桥所有的走法一共有7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040(种)。而这么多情况,要一一试验,这将会是很大的工作量。但怎么才能找到成功走过每座桥而不重复的路线呢?因而形成了著名的“哥尼斯堡七桥问题”。

定义 10.1
(1) 欧拉通路 —— 经过图中每条边一次且仅一次行遍所有顶 点的通路
(2) 欧拉回 —— 经过图中每条边一次且仅一次行遍所有顶 点的回路
(3) 欧拉图 —— 具有欧拉回路的图
(4) 半欧拉图 —— 具有欧拉通路而无欧拉回路的图
几点说明:
规定平凡图为欧拉图
欧拉通路是生成的简单通路,欧拉回路是生成的简单回路
环不影响图的欧拉性
定理 10.1 无向图 G 是欧拉图当且仅当 G 连通且无奇度数顶点
定理 10.2 无向图 G 是半欧拉图当且仅当 G 连通且恰有两个奇 度顶点
定理 10.3 有向图 D 是欧拉图当且仅当 D 是强连通的且每个顶 点的入度都等于出度
定理 10.4 有向图 D 是半欧拉图当且仅当 D 是单向连通的,且 D 中恰有两个奇度顶点,其中一个的入度比出度大 1 ,另一个 的出度比入度大 1 ,而其余顶点的入度都等于出度
定理 10.5 G 是非平凡的欧拉图当且仅当 G 是连通的且为若干 个边不重的圈之并

了解一下

Fleury算法:
(1) 任取 v 0 V ( G ) ,令 P 0 = v 0
(2) P i = v 0 e 1 v 1 e 2 e i v i 已经行遍,按下面方法从 E ( G ) { e 1 , e 2 ,…, e i } 中选取 e i +1
(a) e i +1 v i 相关联
(b) 除非无别的边可供行遍,否则 e i +1 不应该为 G i = G { e 1 , e 2 ,…, e i } 中的桥
(3) (2) 不能再进行时,算法停止
可以证明算法停止时所得简单通路 P m = v 0 e 1 v 1 e 2 e v m ( v m = v 0 ) G 中一条欧拉回路
哈密顿图:
历史背景:

哈密顿周游世界问题与哈密顿图

1859 年爱尔兰数学家威廉·哈密顿(William Hamilton) 提出一个“环游世界” 游戏: 把一个正十二面体的二十个顶点看作世界上著名的二十个城市,如第一个图, 要求游戏者找出一条路线, 沿着正十二面体的棱边访问每个城市恰好一次后回到出发点, 即环游世界. 这个游戏在欧洲风靡一时,哈密顿还以 25 个金币的高价把这个游戏的版权卖给了一个玩具商

定义10.2

(1) 哈密顿通路 —— 经过图中所有顶点一次仅一次的通路
(2) 哈密顿回路 —— 经过图中所有顶点一次仅一次的回路
(3) 哈密顿图 —— 具有哈密顿回路的图
(4) 半哈密顿图 —— 具有哈密顿通路且无哈密顿回路的图
几点说明:
平凡图是哈密顿图
哈密顿通路是初级通路,哈密顿回路是初级回路
环与平行边不影响哈密顿性
哈密顿图的实质是能将图中的所有顶点排在同一个圈上 
例题

以下哪些是欧拉图,半欧拉图,哈密顿图,半哈密顿图

 

从上到下从左到右标号为(a),(b),(c),(d),(e),(f)

欧拉图:(a),(d)

半欧拉图:(b)

哈密顿图:(a),(b),(c),(d)

半哈密顿图:(e)

都不属于:(f)

最短路问题与货郎担问题
定义 10.3 给定图 G = < V , E > ( G 为无向图或有向图 ) ,设 W : E R (R 为实数集 ) ,对 G 中任意边 e = ( v i , v j ) ( G 为有向图 时, e = < v i , v j >) ,设 W ( e ) = w ij ,称实数 w ij 为边 e 上的 ,并将 w ij 标注在边 e 上,称 G 带权图 ,此时常将带权图 G 记作 < V , E , W >

G =< V , E , W > 为一个 n 阶完全带权图 K n ,各边的权非负,且 有的边的权可能为 . G 中的一条最短的哈密顿回路,这就 是货郎担问题的数学模型
例题

找出总部与各个工地的最短路径及其距离

10+3+4+4+2+5=28

这篇关于第十部分 欧拉图与哈密顿图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/539964

相关文章

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

项目实战系列三: 家居购项目 第四部分

购物车 🌳购物车🍆显示购物车🍆更改商品数量🍆清空购物车&&删除商品 🌳生成订单 🌳购物车 需求分析 1.会员登陆后, 可以添加家居到购物车 2.完成购物车的设计和实现 3.每添加一个家居,购物车的数量+1, 并显示 程序框架图 1.新建src/com/zzw/furns/entity/CartItem.java, CartItem-家居项模型 /***

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

欧拉系统 kernel 升级、降级

系统版本  cat  /etc/os-release  NAME="openEuler"VERSION="22.03 (LTS-SP1)"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 (LTS-SP1)"ANSI_COLOR="0;31" 系统初始 kernel 版本 5.10.0-136.12.0.

关于断言的部分用法

1、带变量的断言  systemVerilog assertion 中variable delay的使用,##[variable],带变量的延时(可变延时)_assertion中的延时-CSDN博客 2、until 的使用 systemVerilog assertion 中until的使用_verilog until-CSDN博客 3、throughout的使用   常用于断言和假设中的

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

node快速复制文件或文件夹,排除部分文件(node_modules)

const fs = require('fs')const path = require('path')/*** @description: 获取完整的文件路径* @param {*} url 路径* @return {*} 返回完整的文件路径*/const getPath = (url) => {return path.join(__dirname, url)}/*** @descr