求欧拉回路的算法学习
在求解欧拉回路的问题中我们可以采用fleury算法。
然而在进行算法竞赛时,如果只是求欧拉回路我们可以采用DFS进行实现,需要注意的小细节时在输出边时需要在回溯阶段逆向输出因为遇到 1->2->3->2->1这种图会出现走死路情况
来看道例题:
UVA10054
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include <bits/stdc++.h> using namespace std; const int N = 55; int g[N][N]; int d[N]; int n; void euler( int u) { for ( int v = 1; v <= 50; ++v){ if (g[u][v]) { g[u][v]--; g[v][u]--; euler(v); printf ( "%d %d\n" , v, u); //一定是逆序输出 } } } int main () { int T; scanf ( "%d" , &T); for ( int t = 1; t <= T; ++t) { int u, v; memset (g, 0, sizeof g); memset (d, 0, sizeof d); scanf ( "%d" , &n); for ( int i = 1; i <= n; ++i){ scanf ( "%d%d" , &u, &v); d[u]++; d[v]++; g[u][v]++; g[v][u]++; } printf ( "Case #%d\n" , t); bool is = 1; for ( int j = 1; j <= 50; ++j) { if (d[j] % 2) { is = 0; break ; } } if (!is) { // printf("some heads may be lost\n"); printf ( "some beads may be lost\n" ); } else { for ( int i = 1; i <= 50; ++i) { euler(i); } } if (t != T) { printf ( "\n" ); } } } |
1 |
作者:LightAc
出处:https://www.cnblogs.com/lightac/
联系:
Email: dzz@stu.ouc.edu.cn
QQ: 1171613053
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
出处:https://www.cnblogs.com/lightac/
联系:
Email: dzz@stu.ouc.edu.cn
QQ: 1171613053
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
2019-03-30 牛客比赛3月29日
2019-03-30 HDU1007