news 2026/5/10 2:01:36

PTA 天梯赛 7-32:哥尼斯堡的“七桥问题” ← 欧拉回路 + dfs

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PTA 天梯赛 7-32:哥尼斯堡的“七桥问题” ← 欧拉回路 + dfs

【题目来源】
https://pintia.cn/problem-sets/15/exam/problems/type/7?problemSetProblemId=859
https://pintia.cn/problem-sets/15/exam/problems/type/7

【题目描述】
哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示。

可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707—1783)最终解决了这个问题,并由此创立了拓扑学。
这个问题如今可以描述为判断欧拉回路是否存在的问题。欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个无向图,问是否存在欧拉回路?

【输入格式】
输入第一行给出两个正整数,分别是节点数 n (1≤n≤1000)和边数 m;随后的 m 行对应 m 条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到 n 编号)。

【输出格式】
若欧拉回路存在则输出 1,否则输出 0。

【输入样例一】
6 10
1 2
2 3
3 1
4 5
5 6
6 4
1 4
1 6
3 4
3 6​​​​​​​

【输出样例一】
1

【输入样例二】
5 8
1 2
1 3
2 3
2 4
2 5
5 3
5 4
3 4

【输出样例二】
0

【数据范围】
1≤n≤1000​​​​​​​

【算法分析】
● 欧拉路径与欧拉回路定义
图中经过所有边恰好一次的路径称为欧拉路径(也就是一笔画)。
如果此路径的起点和终点相同,则称其为欧拉回路。
注意:若存在欧拉回路,则一定存在欧拉路径。

● 欧拉路径判定
(1)有向图欧拉路径:图中恰好存在 1 个结点的出度比入度多 1(这个结点即为起点 S),1 个结点的入度比出度多 1(这个结点即为终点 T),其余结点的出度=入度。
(2)有向图欧拉回路:所有结点的入度=出度(起点 S 和终点 T 可以为任意点)。
(3)无向图欧拉路径:图中恰好存在 2 个结点的度是奇数,其余结点的度为偶数,这两个度为奇数的结点即为欧拉路径的起点 S 和终点 T。
(4)无向图欧拉回路:所有结点的度都是偶数(起点 S 和终点 T 可以为任意结点)。

● 这个问题可以转化为计算图中连通分量个数和奇度数顶点个数。

如果一个连通分量中所有顶点度数为偶数,则该分量存在欧拉回路,可以一笔画成
如果一个连通分量中有 k 个奇度数顶点,则需要 k/2 笔才能画完(k 为偶数,根据图论握手定理)。​​​​​​​

【算法代码】

#include <bits/stdc++.h> using namespace std; const int N=1e3+5; int g[N][N]; int st[N],du[N]; int n,m; void dfs(int u) { st[u]=1; for(int i=1; i<=n; i++) { if(st[i]==0 && g[u][i]!=0) dfs(i); } } int main() { cin>>n>>m; int a,b; while(m--) { cin>>a>>b; g[a][b]=g[b][a]=1; du[a]++; du[b]++; } for(int i=1; i<=n; i++) { if(du[i]%2!=0) { cout<<0; return 0; } } dfs(1); for(int i=1; i<=n; i++) { if(st[i]==0) { cout<<0; return 0; } } cout<<1; return 0; } /* in: 5 8 1 2 1 3 2 3 2 4 2 5 5 3 5 4 3 4 out: 0 */



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/160888941
https://blog.csdn.net/hnjzsyjyj/article/details/149031663
https://blog.csdn.net/hnjzsyjyj/article/details/140747624
https://blog.csdn.net/qq_62658309/article/details/127845829



版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 1:58:30

Linux 编程第一个小程序:进度条

进度条实现原理1. 回车换行的关键区别代码语言&#xff1a;javascriptAI代码解释printf("\r倒计时: %2d", count); // \r 回车&#xff1a;回到行首不换行 printf("\n换行测试"); // \n 换行&#xff1a;移到下一行重要区别&#xff1a;\r&…

作者头像 李华
网站建设 2026/5/10 1:57:38

AI编程方法论革命:superpowers-zh如何提升开发效率与代码质量

1. 项目概述&#xff1a;AI编程的“方法论”革命如果你和我一样&#xff0c;在过去一年里深度体验过 Claude Code、Cursor、Hermes Agent 这些新一代的 AI 编程工具&#xff0c;你肯定经历过一个从“惊艳”到“困惑”再到“寻求解法”的过程。最初&#xff0c;你惊叹于 AI 能理…

作者头像 李华
网站建设 2026/5/10 1:53:30

cann/hccl超节点间算法支持

超节点间通信算法支持度列表 【免费下载链接】hccl 集合通信库&#xff08;Huawei Collective Communication Library&#xff0c;简称HCCL&#xff09;是基于昇腾AI处理器的高性能集合通信库&#xff0c;为计算集群提供高性能、高可靠的通信方案 项目地址: https://gitcode.…

作者头像 李华
网站建设 2026/5/10 1:49:34

AI代理网关设计:统一多模型API调用与管理的开源解决方案

1. 项目概述&#xff1a;一个为AI模型接口设计的智能代理网关 最近在折腾AI应用开发&#xff0c;发现一个挺普遍的需求&#xff1a;当你手头有多个不同厂商的AI模型API&#xff08;比如OpenAI的ChatGPT、Anthropic的Claude、Google的Gemini等等&#xff09;&#xff0c;想要在自…

作者头像 李华
网站建设 2026/5/10 1:49:33

基于Docker的Claude插件部署:Centmin Mod环境实战指南

1. 项目概述&#xff1a;一个为Claude AI模型量身打造的插件运行环境如果你和我一样&#xff0c;长期在服务器运维和AI应用部署的第一线摸爬滚打&#xff0c;那你一定对“环境配置”这四个字又爱又恨。爱的是&#xff0c;一个稳定、高效的环境是一切应用的基础&#xff1b;恨的…

作者头像 李华