无向图欧拉回路,判断
题:欧拉回路
本题是给图判断图中是否存在欧拉回路,欧拉回路的含义题目中也说明了,本题的思路就是并查集判断图是否连通,如果不连通不可能存在欧拉回路,如果连通了判断欧拉回路存在的条件是图中各点的度全部为偶数(所以这里需要注意将存放顶点度的数组初始化)。

1 /***********************************************/ 2 int in[maxn],out[maxn]; 3 int st[maxn]; 4 5 int find(int r) 6 { 7 while(st[r]!=r) 8 r=st[r]; 9 return r; 10 } 11 12 void add(int a,int b) 13 { 14 int fa=find(a); 15 int fb=find(b); 16 if(fa<fb) st[fb]=fa; 17 else st[fa]=fb; 18 } 19 20 int mp[maxn]; 21 22 int main() 23 { 24 int n,m; 25 while(cin>>n && n) 26 { 27 cin>>m; 28 mem0(st); 29 mem0(mp); 30 mem0(in); 31 for(int i=1;i<=n;i++) st[i]=i; 32 for(int i=1;i<=m;i++) 33 { 34 int a,b; 35 cin>>a>>b; 36 if(a>b) swap(a,b); 37 if(mp[a]!=b) 38 {//输入的边不重复 39 mp[a]=b; 40 in[a]++; 41 in[b]++; 42 add(a,b);//合并 43 } 44 } 45 int ans=0; 46 for(int i=1;i<=n;i++) if(st[i]==i) ans++; 47 if(ans>1)//不连通 48 cout<<0<<endl; 49 else{ 50 int f=0; 51 for(int i=1;i<=n;i++) if(in[i]%2) f=1; 52 if(f) cout<<0<<endl; 53 else cout<<1<<endl; 54 } 55 } 56 return 0; 57 }
并查集~
总结:欧拉回路存在条件
1,图连通
2,图中各点的度全部为偶数
关于欧拉回路与欧拉路径的判断->>>>>自家博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】