
H - 数据结构实验之图论八:欧拉回路(DFS+欧拉图 )
发布日期:2021-05-04 14:45:21
浏览次数:40
分类:原创文章
本文共 1597 字,大约阅读时间需要 5 分钟。
Description
在哥尼斯堡的一个公园里,有七座桥将普雷格尔河中两个岛及岛与河岸连接起来。
能否走过这样的七座桥,并且每桥只走一次?瑞士数学家欧拉最终解决了这个问题并由此创立了拓扑学。欧拉通过对七桥问题的研究,不仅圆满地回答了哥尼斯堡七桥问题,并证明了更为广泛的有关一笔画的三条结论,人们通常称之为欧拉定理。对于一个连通图,通常把从某结点出发一笔画成所经过的路线叫做欧拉路。人们又通常把一笔画成回到出发点的欧拉路叫做欧拉回路。具有欧拉回路的图叫做欧拉图。
你的任务是:对于给定的一组无向图数据,判断其是否成其为欧拉图?
Input
连续T组数据输入,每组数据第一行给出两个正整数,分别表示结点数目N(1 < N <= 1000)和边数M;随后M行对应M条边,每行给出两个正整数,分别表示该边连通的两个结点的编号,结点从1~N编号。
Output
若为欧拉图输出1,否则输出0。
Sample
Input
16 101 22 33 14 55 66 41 41 63 43 6
Output
1
Hint
如果无向图连通并且所有结点的度都是偶数,则存在欧拉回路,否则不存在。
注意:
1.记得清空数组2.记得判断图是否连通
答案:
#include <iostream>#include<bits/stdc++.h>#define ll long long#define INF 0x3f3f3f3fconst int N = 1111;using namespace std;int mp[N][N]; //无向图int dp[N]; //记录度bool vis[N]; //标记数组int cnt;void DFS(int pos,int n) //DFS判断是否连通{ vis[pos]=1; cnt++; int i; for(i=1;i<=n;i++) { if(!vis[i]&&mp[pos][i]) { DFS(i,n); } }}int main(){ ios::sync_with_stdio(0); int t; cin>>t; while(t--) { memset(mp,0,sizeof(mp)); //清空数组 memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); int n,m; cin>>n>>m; int x,y; while(m--) { cin>>x>>y; mp[x][y]=mp[y][x]=1; //构建无向图 dp[x]++; //记录x的度 dp[y]++; //记录y的度 } int i; cnt=0; DFS(1,n); //判断是否连通 int flag=0; for(i=1; i<=n; i++) { if(dp[i]%2) { flag=1; break; } } if(!flag&&cnt==n) cout<<1<<endl; else cout<<0<<endl; } return 0;}
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月01日 16时26分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
jQuery 事件及动画
2019-03-04
Vue 生命周期和钩子函数
2019-03-04
求n内的素数,并打印出来(c语言)
2019-03-04
[电影]《Ladybird》演绎完整18岁的青春
2019-03-04
[转]如何搭建基于Hexo的独立博客
2019-03-04
妈,今天清明
2019-03-04
树莓派博通BCM2835芯片的IO口驱动代码调试和测试
2019-03-04
MySQL复习基础语句
2019-03-04
npm问题汇总
2019-03-04
金融信息安全之漏洞利用与安全加固
2019-03-04
Vue快速入门学习笔记(更新ing)
2019-03-04
js中[]、{}、()的区别
2019-03-04
js-禁止右键菜单代码、禁止复制粘贴代码
2019-03-04
style标签放在body前和body后的区别
2019-03-04
记一次vue项目启动失败
2019-03-04
Linux命令-nmap
2019-03-04
关于mysql卸载问题
2019-03-04
血色先锋队
2019-03-04
21年寒假第一周周练/HDU1176:免费馅饼
2019-03-04