首页 > 其他分享 >“欧拉回路”与“哈密尔顿回路”

“欧拉回路”与“哈密尔顿回路”

时间:2023-02-03 11:01:46浏览次数:41  
标签:int 哈密尔顿 座桥 回路 include 欧拉


1.欧拉回路

17世纪的东普鲁士有一座哥尼斯堡(Konigsberg)城(现为俄国的加里宁格勒(Kaliningrad)城),城中有一座奈佛夫(Kneiphof)岛,普雷格尔(Pregol)河的两条支流环绕其旁,并将整个城市分成北区、东区、南区和岛区4个区域,全城共有7座桥将4个城区相连起来,如图1所示。人们常通过这7座桥到各城区游玩,于是产生了一个有趣的数学难题:寻找走遍这7座桥,且只许走过每座桥一次,最后又回到原出发点的路径。该问题就是著名的“哥尼斯堡七桥问题”。

“欧拉回路”与“哈密尔顿回路”_欧拉回路

图1  哥尼斯堡地图

1736年,大数学家列昂纳德·欧拉(L.Euler)发表了关于“哥尼斯堡七桥问题”的论文—《与位置几何有关的一个问题的解》(Solutio Problematis ad Geomertriam Situs Pertinentis),他在文中指出,从一点出发不重复地走遍七桥,最后又回到原出发点是不可能的。

为了解决哥德斯堡七桥问题,欧拉对该问题进行了抽象,用4个字母A、B、C、D代表4个城区,用7条线表示7座桥,如图2所示。这样做抽象出了问题中最本质的东西,忽视问题非本质的东西(如桥的长度、宽度等),从而将哥尼斯堡七桥问题抽象为一个数学问题,即经过图中每边一次且仅一次的回路问题。欧拉在论文中论证了这样的回路是不存在的,后来,人们把有这样回路的图称为欧拉图。

欧拉在论文中将问题进行了一般化处理,即对给定的任意一个河道图与任意多座桥,判定可能不可能每座桥恰好走过一次(不一定回到原出发点),并用数学方法给出了3条判定的规则:

(1)如果通奇数座桥的地方不止两个,满足要求的路线是找不到的。

(2)如果只有两个地方通奇数座桥,可以从这两个地方之一出发,找到所要求的路线。

(3)如果没有一个地方是通奇数座桥的,则无论从哪里出发,所要求的路线都能实现。

上述3条判定规则包含了任一连通无向图是否存在“欧拉路径(Euler Path)”和“欧拉回路(EulerCircuit)”的判定条件。根据判定规则(3)可以得出,任一连通无向图存在欧拉回路的充分必要条件是图的所有顶点均有偶数度。

“欧拉回路”与“哈密尔顿回路”_#include_02

图2  图

 

2.哈密尔顿回路

“哈密尔顿回路问题”问题是爱尔兰著名学者威廉·哈密尔顿爵士(W.R.Hamilton)1859年提出的一个数学问题。其大意是:在任一给定的图中,能不能找到这样的路径,即从一点出发不重复地走过所有的结点(不必通过图中每一条边),最后又回到原出发点。

 

3.欧拉回路与哈密尔顿回路的区别

“哈密尔顿回路问题”与“欧拉回路问题”看上去十分相似,然而却是完全不同的两个问题。“哈密尔顿回路问题”是访问除原出发结点以外的每个结点一次且仅一次(图2有哈密尔顿回路,如B到C到A到D再到B就是一个回路),而“欧拉回路问题”是访问每条边一次且仅一次;对任一给定的图是否存在“欧拉回路”欧拉已给出了充分必要条件,而对任一给定的图是否存在“哈密尔顿回路”至今仍未找到满足该问题的充分必要条件。

 

4.例题

赛纳河流经巴黎的这一段河中有两个岛,河岸与岛间架设了15座桥。如下图所示。问:(l)能否从某地出发,经过这15座桥各一次后再回到出发点?

(2)若不要求回到出发点,能否在一次散步中,穿过所有的桥各一次?若可以,请把路径写出。

“欧拉回路”与“哈密尔顿回路”_#include_03

解:将该问题进行抽象,如下图所示.(1)就变成了是否存在欧拉回路的问题了;(2)就变成了是否存在欧拉路径的问题了.

“欧拉回路”与“哈密尔顿回路”_结点_04

    A和B是通偶数座桥的地方,C和D是通奇数座桥的地方,满足欧拉给出的判定规则(2),即如果只有两个地方通奇数座桥,可以从这两个地方之一出发,找到欧拉路径;但不满足规则(3),即不存在欧拉回路。

必为哈密尔顿回路的条件

任意两个结点的度数和>=n(点的个数)

一定有汉密尔顿路的图:任意两个结点的度数和>=n-1

哈密顿回路模板:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<queue>
#include<set>
#include<iomanip>
#include<math.h>
using namespace std;
typedef long long ll;
typedef double ld;
const int INF = 0x3f3f3f3f;

int n, m, x, lenth, g[MAXN][MAXN], num[MAXN], ans[MAXN];
bool val[MAXN], visit[MAXN];
void print(){
for(int i=1;i<lenth;i++) printf("%d ",ans[i]);
printf("%d\n",ans[lenth]);
}
void dfs(int last, int cur){
visit[cur] = true;
ans[++lenth] = cur;
for(int i=1;i<=n;i++){
if(g[cur][i] && i==x&&x!=last){
ans[++lenth] = i;
print();
lenth--;
//break;
}
if(!visit[i]&&g[cur][i]&&(i>cur)) dfs(cur,i);
}
lenth--;//»ØËÝ
visit[cur] = false;//»ØËÝ
}

int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u, v;
scanf("%d%d",&u,&v);
g[u][v]++;
g[v][u]++;
}
for(x=1;x<=n;x++)
{
lenth=0;dfs(0,x);
}
return 0;
}

 

标签:int,哈密尔顿,座桥,回路,include,欧拉
From: https://blog.51cto.com/u_15952369/6035591

相关文章

  • 欧拉函数及其定理学习笔记
    ——bysunzz3183欧拉函数出自:筛初步欧拉函数进阶定义\[\varphi(n)=\sum\limits_{i=1}^{n}[\gcd(n,i)=1]\]筛法原理\[\varphi(n)=n\prod_{i=1}^{k}(1-\frac{......
  • 欧拉的“她力量”,如何为品牌注入新能量?
    文|智能相对论作者|Kinki近日,百度营销联合CBNData推出的《2022新能源汽车趋势洞察》正式发布,报告显示,随着新能源汽车的普及,新中产女性已成为了“消费新势力”。女性更偏爱......
  • 欧拉函数的一些题
    欧拉函数及相关定理1.P2158[SDOI2008]仪仗队原题链接题目大意在一个从\((0,0)\)到\((n-1,n-1)\)的方阵中,有多少点能从原点“看到”分析一个点\(D\)能从原点“看......
  • 欧拉函数
    欧拉函数是对于一个数\(N\),在\(1-N\)范围内所有与\(N\)互质的数的个数。欧拉函数需要通过线性筛实现:如果\(i\)为素数,显然\(\phi(i)=i-1\)否则考虑\(\phi(i......
  • 使用Julia解答欧拉计划——30题
    题目找到所有数字,其自身等于其各位数字的5次幂之和。题目来源欧拉计划30题解答由于数字较大,因此通过采用先将数字转变为字符串的方式来读取其中的每个数字。a是一个n位......
  • 使用Julia解答欧拉计划——28题
    题目螺旋数阵对角线 欧拉计划第28题解答1每一圈的和可以计算为以下式子(除了第一圈)mylist = [4*i^2-6*(i-1) for i ∈ 3:2:1001]myanswer = sum(vcat(1,myli......
  • 欧拉函数与莫比乌斯函数的一些性质
    前置知识翡蜀定理与算数基本定理的证明积性函数若有一个数论函数\(f\)满足以下性质:\(\left(1\right)f\left(1\right)=1\)\(\left(2\right)\)若\(a,b\)互质,那么\(f\le......
  • 欧拉函数
    对正整数n,欧拉函数是小于等于n的数中与n互质的数的个数 性质摘要f(a*b)=f(a)*f(b)f(x^a)=(x-1)*x^(a-1) 求法依据公式  ......
  • [第326场周赛]分解质因数,埃氏筛,欧拉筛
    leetcode新年福利,本次周赛没有Hard难度的题目,然后我就第一次AK了~总的来说不是很难,涉及到了三个算法,在此记录一下。分解质因数题目链接:​​6279.数组乘积中的不同质因数数......
  • 欧拉函数的实现
    目录欧拉函数的定义欧拉函数的一般解法(试除法)线性筛欧拉函数的线性筛法参考资料欧拉函数的定义对于正整数\(n\),欧拉函数\(\varphi(n)\)是小于等于\(n\)的正整数中与......