题268.2022分队天梯赛训练-7-41 哥尼斯堡的“七桥问题” (25 分)

文章目录

  • 题268.2022分队天梯赛训练-7-41 哥尼斯堡的“七桥问题” (25 分)
  • 一、题目
  • 二、题解


题268.2022分队天梯赛训练-7-41 哥尼斯堡的“七桥问题” (25 分)


一、题目

题268.2022分队天梯赛训练-7-41 哥尼斯堡的“七桥问题” (25 分)_第1张图片
题268.2022分队天梯赛训练-7-41 哥尼斯堡的“七桥问题” (25 分)_第2张图片
在这里插入图片描述

二、题解

本题考察判断一个无向图是否具有欧拉回路,条件是图连通且所有的点度数为偶数。代码如下:

#include 

using namespace std;

const int maxn=1010;

int N,M;
int G[maxn][maxn];
int vis[maxn];
int degree[maxn];

void dfs(int v0)
{
    vis[v0]=1;
    for(int v=1;v<=N;v++)
    {
        if(!vis[v]&&G[v0][v])
        {
            dfs(v);
        }
    }
}

int main()
{
    fill(G[0],G[0]+maxn,0);
    cin>>N>>M;
    for(int i=0;i<M;i++)
    {
        int u,v;
        cin>>u>>v;
        G[u][v]=G[v][u]=1;
        degree[u]++;//统计点的度数
        degree[v]++;
    }
    for(int i=1;i<=N;i++)
    {
        if(!vis[i])
        {
            if(i>1)//若进行dfs一次还无法将所有的点遍历则图不连通,则不具有欧拉回路
            {
                cout<<0<<endl;
                return 0;
            }
            dfs(i);
        }
    }
    for(int i=1;i<=N;i++)
    {
        if(degree[i]&1)//有点度数为奇数,则不具有欧拉回路
        {
            cout<<0<<endl;
            return 0;
        }
    }
    cout<<1<<endl;
    return 0;
}


  • 关于欧拉回路
    定义:存在一条路径,起点和终点相同,且经过所有的边一次。
    判断:图连通+无向图欧拉回路:所有点度数都为偶数/有向图欧拉回路:所有点入度=出度
  • 关于欧拉路径
    定义:存在一条路径,经过所有的边一次。
    判断:图连通+无向图欧拉路径:图中只有两个点(或0个点)度数为奇数/有向图欧拉路径:一个点入度=出度+1,一个点出度=入度+1(两个端点),其余点(或所有点)入度=出度

你可能感兴趣的:(天梯赛训练,c++,算法,图论)