一笔画问题

描述

 

如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。
根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行dfs,时间复杂度为O(m+n),m为边数,n是点数。

 

输入描述

 

第一行n,m,有n个点,m条边,以下m行描述每条边连接的两点。

 

输出描述

 

欧拉路或欧拉回路,输出一条路径即可。

 

用例输入 1 

5 5
1 2
2 3
3 4
4 5
5 1

用例输出 1 

1 5 4 3 2 1
复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3+10,inf = 0x3f3f3f3f;
int g[N][N],d[N];
int n,m;
int pre[N],k;
void dfs(int x)
{
    for(int i=1;i<=n;i++)
    {
        if(g[x][i]) //有边没走过 
        {
            g[x][i] = g[i][x] = 0; //删边 
            
            dfs(i);
        }
    }
    pre[++k] = x; //记录路径 
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;cin>>x>>y;
        g[x][y] = g[y][x] = 1;
        d[x]++;d[y]++; //记录每个点的度 
    }
    int st = 1;
    for(int i=1;i<=n;i++)
    {
        if(d[i]%2==1)st = i; //找奇点 
    }
    dfs(st);
    for(int i=1;i<=k;i++)
    {
        cout<<pre[i];
        if(i!=k)cout<<" ";
    }
     return 0;
}
复制代码

 

posted @   CRt0729  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示