首页 > 其他分享 >欧拉回路

欧拉回路

时间:2023-07-02 20:57:43浏览次数:38  
标签:int dfs ++ long 回路 欧拉

定义

欧拉通路:能一次性走完一张图上所有的边,且每条边只经过一次
欧拉回路:能一次性走完一张图上所有的边,每条边只经过一次,且这条路径构成一个回路(即最终回到了出发点)

欧拉回路必须满足的条件:

无向图:度数为奇数的点的个数 == 0 或者 == 2(== 0 : 欧拉回路, == 2 :欧拉通路)

有向图:除了起点和终点,每个点的入度 == 出度,满足 起点的出度-入度 == 1 && 终点入度-出度 == 1 或者 起点终点为同一个

思路

dfs

首先需要确定dfs的起点,这可以通过输入边时统计度数实现,如果奇数度数的点不是0或2,则无欧拉通路;有两个奇数点的,找到其中一个点作为起点;度数全为偶数的,任意指定一个点作为起点。

然后开始dfs,每经过一条路时就把它的次数--,免得重复经过,当无路可走时,就存下当前的点(注意是逆序),回溯,继续遍历

模版题

https://www.luogu.com.cn/problem/P2731

code

#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
using namespace std;
const int N = 500 + 10;
int m, n = 500, u, v;
int rd[N], path[N][N];
int start = 1;
int cnt, ans[N];

void dfs(int u) {
    for(int i = 1; i <= 500; i++) {
        if(path[u][i]) {
            path[u][i]--;
            path[i][u]--;  //  有向图删掉
            dfs(i);
        }
    }
    ans[++cnt] = u;
}

int main() {  
    ios::sync_with_stdio(false);
    cin >> m;
    for(int i = 1; i <= m; i++) {
        cin >> u >> v;
        path[u][v]++; path[v][u]++;
        rd[u]++; rd[v]++;
    }
    for(int i = 1; i <= 500; i++) {
        if(rd[i] % 2) {
            start = i;
            break;
        }
    }
    dfs(start);
    for(int i = cnt; i >= 1; i--) cout << ans[i] << endl;
    return 0;
}

标签:int,dfs,++,long,回路,欧拉
From: https://www.cnblogs.com/re0acm/p/17521363.html

相关文章

  • 数据流量来回路径一致配置
    修改OSPF开销,实现数据来回路径一致未配置前,路由表有多条路径[R1]displayiprouting-tableRouteFlags:R-relay,D-downloadtofib------------------------------------------------------------------------------RoutingTables:PublicDestinations:37......
  • 欧拉定理
    欧拉定理定理内容对于两个互质的整数a,n有\(a^{\varphi(n)}\equiv1(mod\enspacen)\)这里的\(\varphi(n)\)指的是欧拉函数。-数学证明由\(\varphi(n)\)可知从1到n与n互质的有\(m_1,m_2,m_3\dotsm_{\varphi(n)}\)。全部乘以a得\(am_1,am_2,am_3\dotsam_{\varphi(n)}\),由起......
  • 欧拉函数证明与代码实现
    欧拉函数定义对于正整数n小于等于n的数中与n互质的数的个数记为\(\varphi(n)\),即为欧拉函数欧拉公式由算数基本定理任意一个正整数都可以写作n=\(p_1^{a_1}p_2^{a_2}\cdotsp_k^{a^k}\)那么\(\varphi(n)=n\prod\limits_{i=1}^{k}({1-\frac{1}{p_i}})\)数学证明首先\(\var......
  • 欧拉函数
    欧拉函数定义对于正整数n小于等于n的数中与n互质的数的个数记为$\varphi(n)$,即为欧拉函数欧拉公式由算数基本定理任意一个正整数都可以写作n=$p_1{a_1}p_2{a_2}\cdotsp_k{ak}$那么$\varphi(n)=n\prod\limits_{i=1}^{k}({1-\frac{1}{p_i}})$数学证明首先$\varphi(n)$是一......
  • bc-liunx欧拉编译安装nginx
    1、下载nginx包上次至目标服务器2、解压包3、安装依赖包yuminstall-ypcrepcre-develpcrepcre-developensslopenssl-develzlibzlib-develgdgd-devel4、编译安装nginx,这里记住nginx不要放在和编译路径一个文件夹,不然会报错,一下是编译命令与建议参数./configure--prefix......
  • 欧拉函数,欧拉定理,费马定理
    欧拉函数:指从1-n中与n互质的数的个数首先要知道,一个数$n$分解质因数之后会变成这样一个形式:$n$= $p1k1$ +$p2k2$+...+$pnkn$而欧拉函数:$φ$=$n$*(1-1/p1)*(1-1/p2)*...*(1-1/pn).证明: 1.由于n可以被分解为p1,p2..的倍数,那么首先要用n-n/p1-n/p2......
  • 路径计数 6.20西安集训(最短哈密顿回路条数)
     因为是哈密顿回路,所以每个点度数为2假设我们已经考虑了i个点,其中b个B,w个W。若存在x条由{1,2,...n}连向{i+1,...2n},那么{1...n}内部的连边数为(2*i-x)/2而只有不同颜色的点会连边,故(2*i-x)/2<=2*min(w,b)x>=2(w+b)-4min(w,b)=2|w-b|则x>=2max(1,|w-b|).为了求得最短路,我们肯定......
  • 欧拉回路
    日常发癫好累好累好累好累。。。好烦好烦好烦好烦。。。 欧拉回路前置概念度数(出度和入度),对于无向图中一点的度数即为与该点相连的边数。性质欧拉回路 无向图每个点的度数均为偶数。可以想象,如果存在欧拉回路则通过一条边进入某个点时,必然需要从另一条边出来,即......
  • Primes on Interval(欧拉筛+二分+滑动窗口)
    【题面】你决定用素数定理来做一个调查.众所周知,素数又被称为质数,其含义就是除了数字一和本身之外不能被其他任何的数字除尽.现在给定一个正整数序列 ,+1,⋯ ,a,a+1,⋯,b (≤)(a≤b),请找出一个最小值 l,使其满足对于任意一个长度为 l 的子串,都包含 k 个质数.......
  • LED开关电源里的PCB回路设计应该怎么做?
    LED开关电源的研发速度在最近几年中有了明显的技术飞跃,新产品更新换代的速度也加快了许多。作为最后一个设计环节,PCB的设计也显得尤为重要,因为一旦在这一环节出现问题,那么很可能会对整个的LED开关电源系统产生较多的电磁干扰,对于电源工作的稳定性和安全性也都会造成不利影响。那么,P......