题目1027:欧拉回路

题目描述:

    欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
输入:

    测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结束。
输出:

    每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
样例输入:
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
样例输出:
1
0

Code:
#include <iostream>

using namespace std;

int Tree[1001];         //存储每个结点的父节点
int degree[1001];       //存储每个结点的度(无向图)

int findRoot(int x){
    if(Tree[x]==-1)
        return x;
    else{
        int tmp=findRoot(Tree[x]);
        Tree[x]=tmp;
        return tmp;
    }
}

/*思想:
    1.利用并查集来判断是否是连通图
    2.如果所给出的图是一个连通图,然后再看每个结点的
      度,如果某个结点的度为1,那么就形成不了"欧拉回路"*/

int main()
{
    int n,m;
    while(cin>>n){
        if(n==0)
            break;
        cin>>m;
        for(int i=1;i<=n;++i){  //初始化
            Tree[i]=-1;
            degree[i]=0;
        }
        for(int i=0;i<m;++i){
            int a,b;
            cin>>a>>b;
            ++degree[a];
            ++degree[b];
            int root_a=findRoot(a);
            int root_b=findRoot(b);
            if(root_a!=root_b){
                Tree[root_b]=root_a;
            }
        }
        int cnt=0;    //统计连通分量的个数
        bool flag=true;
        for(int i=1;i<=n;++i){
            if(Tree[i]==-1)
                ++cnt;
        }
        if(cnt!=1){
            cout<<0<<endl;
            flag=false;
        }
        else{
            for(int i=1;i<=n;++i){
                if(degree[i]==1){     //看是否存在度为1的结点
                    cout<<0<<endl;
                    flag=false;
                    break;
                }
            }
        }
        if(flag==true)
            cout<<1<<endl;
    }
    return 0;
}

/**************************************************************
    Problem: 1027
    User: lcyvino
    Language: C++
    Result: Accepted
    Time:130 ms
    Memory:1528 kb
****************************************************************/

时间: 2024-11-03 20:53:13

题目1027:欧拉回路的相关文章

poj1637 Sightseeing tour,混合图的欧拉回路问题,最大流解

混合图的欧拉回路问题 题目地址 欧拉回路问题 1 定义 欧拉通路 (Euler tour)--通过图中每条边一次且仅一次,并且过每一顶点的通路. 欧拉回路 (Euler  circuit)--通过图中每条边一次且仅一次,并且过每一顶点的回路. 欧拉图--存在欧拉回路的图.  2 无向图是否具有欧拉通路或回路的判定  G有欧拉通路的充分必要条件为:G 连通,G中只有两个奇度顶点(它们分别是欧拉通路的两个端点). G有欧拉回路(G为欧拉图):G连通,G中均为偶度顶点.  3 有向图是否具有欧拉通路或

欧拉回路,欧拉路径

介绍的内容 博客2 题目:欧拉回路 题意: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? #include<iostream> #include<cstdio> #include <cctype> #include<algorithm> #include<cstring> #include<cmath> #include<string> #include&

九度1027 - 数学 - 欧拉回路

欧拉回路是指每条边恰好只走一次,并能回到出发点的路径. 我们如何判断一个图有欧拉回路? 一.无向图 每个顶点的度数都是偶数,则存在欧拉回路. 二.有向图(所有边都是单向的) 每个节顶点的入度都等于出度,则存在欧拉回路. 知道了这些,我们只要判断每个边的度数即可. #include<stdio.h> #include<string.h> int du[1010]; int main(){ int m,n,x,y; while(scanf("%d",&n)&

HDU 题目分类

基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093.1094.1095.1096.1097.1098.1106.1108.1157.1163.1164.1170.1194.1196.1197.1201.1202.1205.1219.1234.1235.1236.1248.1

HDOJ ACM题目分类

模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 1075 1082 1083 1084 1088 1106 1107 1113 1117 1119 1128 1129 1144 1148 1157 1161 1170 1172 1177 1197 1200 1201 120

转载:hdu 题目分类 (侵删)

转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093. 1094.1095.1096.1097.1098.1106.1108.1157.116

HDOJ的题目分类

模拟题, 枚举 1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 1075 1082 1083 1084 1088 1106 1107 1113 1117 1119 1128 1129 1144 1148 1157 1161 1170 1172 1177 1197 1200 1201 12

hd题目分类

分类一(详细): 分类二: 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093.1094.1095.1096.1097.1098.1106.1108.1157.1163.1164.1170.1194.1196.1197.1201.1202.1205.1219.1234.12

HDU——PKU题目分类

HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 1075 1082 1083 1084 1088 1106 1107 1113 1117 1119 1128 1129 1144 1148 1157 1161 1170 1172 1177 1197 1200 1201