zoukankan      html  css  js  c++  java
  • 欧拉回路

    若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。若该路径是一个圈,则称为欧拉(Euler)回路。
    具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。
    无向图存在欧拉回路的充要条件:一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图。
    有向图存在欧拉回路的充要条件:一个有向图存在欧拉回路,所有顶点的入度等于出度且该图是连通图。
    题目:
    Problem Description
    欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
    Input
    测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
    束。
    Output
    每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
    Sample Input
    3 3
    1 2
    1 3
    2 3
    3 2
    1 2
    2 3
    0
    Sample Output
    1
    0
    C++代码如下:
    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<string>
    #include<stdio.h>
    using namespace std;
    #define maxLen 1001
    class node{
    public:
        vector<int> list; //用邻接表来存储图
        int count(){
            return list.size();
        }
        void push(int index){
            list.push_back(index);
        }
        int pop(){
            int index = list.back();
            list.pop_back();
            return index;
        }
        void clear(){
            list.clear();
        }
    };
    int main(){
        int N;
        int M;
        vector<int> result;
        node vertex[maxLen+1];//从下表1开始
        while (true){
            cin >> N;
            if (N == 0){
                break;
            }
            else{
                cin >> M;
                for (int i = 0; i < M; ++i){
                    int v1, v2;
                    cin >> v1 >> v2;
                    vertex[v1].push(v2);
                    vertex[v2].push(v1);
                }
                int j;
                for (j = 0; j < N; ++j){
                    if (vertex[j].count() % 2 != 0){
                        break;
                    }
                }
                if (j == N){
                    result.push_back(1);
                }
                else{
                    result.push_back(0);
                }
            }
        }
        for (int i = 0; i < result.size(); ++i){
            cout << result[i] << endl;
        }
        system("pause");
        return 0;
    }
     
     
  • 相关阅读:
    tile38 复制配置
    The Guardian’s Migration from MongoDB to PostgreSQL on Amazon RDS
    tile38 一款开源的geo 数据库
    sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
    sqler sql 转rest api javascript 试用
    sqler sql 转rest api redis 接口使用
    sqler sql 转rest api 的docker image
    sqler sql 转rest api 的工具试用
    apache geode 试用
    benthos v1 的一些新功能
  • 原文地址:https://www.cnblogs.com/codeDog123/p/6668166.html
Copyright © 2011-2022 走看看