zoukankan      html  css  js  c++  java
  • Uva 10054 欧拉回路 打印路径

    看是否有欧拉回路 有的话打印路径

    欧拉回路存在的条件:

    如果是有向图的话

    1.底图必须是连通图

    2.最多有两个点的入度不等于出度 且一个点的入度=出度+1 一个点的入度=出度-1

    如果是无向图的话

    1.如果这个无向图的连通的 当最多只有两个度数为奇数的点 就一定有欧拉回路 

    当有两个度数为奇数的点的时候 一个为起点 一个为终点

    //============================================================================
    // Name        : UVA.cpp
    // Author      : 
    // Version     :
    // Copyright   : Your copyright notice
    // Description : Hello World in C++, Ansi-style
    //============================================================================
    
    #include <iostream>
    #include <stdio.h>
    #include <algorithm>
    #include <string.h>
    #include <map>
    #include <vector>
    using namespace std;
    const int MAXN=1010;
    int F[60];
    int find(int x)
    {
        if(F[x]==-1)return x;
        else return F[x]=find(F[x]);
    }
    void bing(int x,int y)
    {
        int t1=find(x);
        int t2=find(y);
        if(t1!=t2)F[t1]=t2;
    }
    int num[60];
    int G[60][60];
    void Traverse(int u)
    {
        for(int v=1;v<=50;v++)
            if(G[u][v]>0)
            {
                G[u][v]--;
                G[v][u]--;
                Traverse(v);
                printf("%d %d
    ",v,u);
            }
    }
    int main()
    {
    //    freopen("in.txt","r",stdin);
    //    freopen("out.txt","w",stdout);
        int T;
        int n;
        scanf("%d",&T);
        int iCase=0;
        while(T--)
        {
            if(iCase>0)printf("
    ");
            iCase++;
            scanf("%d",&n);
            int u,v;
            memset(F,-1,sizeof(F));
            memset(num,0,sizeof(num));
            memset(G,0,sizeof(G));
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&u,&v);
                num[u]++;
                num[v]++;
                bing(u,v);
                G[u][v]++;
                G[v][u]++;
            }
            bool flag=true;
            int temp=-1;
            for(int i=1;i<=50;i++)
            {
                if(num[i]==0)continue;
                if(num[i]%2)
                {
                    flag=false;
                    break;
                }
                if(temp==-1)
                {
                    temp=find(i);
                    continue;
                }
                if(temp!=find(i))
                {
                    flag=false;
                    break;
                }
            }
            printf("Case #%d
    ",iCase);
            if(!flag)
            {
                printf("some beads may be lost
    ");
                continue;
            }
            for(int i=1;i<=50;i++)
                if(num[i]!=0)
                {
                    u=i;
                    break;
                }
            Traverse(u);
        }
        return 0;
    }
  • 相关阅读:
    论文解析 -- TiDB: A Raftbased HTAP Database
    人生资产负债表
    Hadoop、Hive、Spark 之间关系
    在 Python3 中,bytes 和 str 的互相转换方式是
    json中load和loads区别
    springboot——修改html实时生效,不用重启tomca(idea版)
    ThinkPHP6 利用crontab+think make:command执行定时任务 tp6默认不可以用命令行访问控制器
    Whoops, GitLab is taking too much time to respond.解决
    phpmyadmin导入csv文件 #1366
    pipenv --python 'python/path' install 报错原因
  • 原文地址:https://www.cnblogs.com/Aragaki/p/7544691.html
Copyright © 2011-2022 走看看