zoukankan      html  css  js  c++  java
  • 欧拉回路判定与求解

    图G是欧拉图,即存在欧拉回路的条件::smile:

    1.图是联通的

    2.对于无向图,奇度数点个数为0。对于有向图,每个顶点出度等于入度。

    欧拉回路算法模板(链式前向星和DFS实现):

    int ans[N];
    int k = 0;
    int vis[2*M];
    
    void DFS(int now)
    {
        for(int u=first[now];u!=-1;u=G[u].next)
        {
            if(!vis[u])
            {
                vis[u] = 1;    //标记当前边
                vis[u^1] = 1;  //标记反向的另一条边
                DFS(G[u].v);
                ans[k++] = k;
            }
        }
    }

    模板题 POJ 2230 Watchcow

    把无向图看成有向图,求其欧拉回路。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define N 100007
    
    struct Edge
    {
        int v,next;
    }G[N];
    int n,m,tot;
    int first[10005];
    int vis[N];
    
    void addedge(int u,int v)
    {
        G[tot].v = v;
        G[tot].next = first[u];
        first[u] = tot++;
    }
    
    void DFS(int now)
    {
        for(int u=first[now];u!=-1;u=G[u].next)
        {
            if(!vis[u])
            {
                vis[u] = 1;    //标记当前边
                DFS(G[u].v);
            }
        }
        printf("%d
    ",now);
    }
    
    int main()
    {
        int u,v;
        tot = 0;
        scanf("%d%d",&n,&m);
        memset(first,-1,sizeof(first));
        while(m--)
        {
            scanf("%d%d",&u,&v);
            addedge(u,v);
            addedge(v,u);
        }
        DFS(1);
        return 0;
    }
    View Code
  • 相关阅读:
    Request
    HTTP
    mysql递归查询函数
    redis 6.0.9配置文件详解
    java对数据进行加密、解密
    java Base64编码、解码
    nginx基础使用
    linux指令笔记
    Spring 常用注解粗陋看法
    docker 已有容器修改容器配置
  • 原文地址:https://www.cnblogs.com/whatbeg/p/3774366.html
Copyright © 2011-2022 走看看