一笔画问题
描述
如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。
根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行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; }
分类:
图论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异