当前位置: 首页 > news >正文

图的欧拉道路和欧拉回路

图的欧拉道路与回路(不重复的走过所有边而不是点)

定理1:存在欧拉路的条件:图是连通的,有且只有2个奇点。
定理2:存在欧拉回路的条件:图是连通的,有0个奇点。
前提必须连通
并且是无向图

对于有向图,有:
图是联通的(忽略边的方向)
当所有节点入度等于出度时存在欧拉回路
当只有一个节点出度等于入度+1,且只有一个节点入度等于出度+1时且其它节点入度等于出度时存在欧拉道路

此时出度等于入度+1的为起点,入度等于出度+1的为终点
不确定!!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int degreeru[201],degreechu[201],vis[201][201],g[201][201];
int n,m;
void dfs(int u){cout<<u<<" ";for(int i=1;i<=n;++i){if(g[u][i]&&!vis[u][i]){vis[u][i]=1;//注意有向图!!! dfs(i);}}}
int main(){//有向图 cin>>n>>m;for(int i=0;i<m;++i){int u,v;cin>>u>>v;g[u][v]=1;++degreechu[u];//分入度出度!! ++degreeru[v];}int t=0;int a,fl=0;for(int i=1;i<=n;++i){if(degreechu[i]==degreeru[i]+1){++t;if(t>1){cout<<"No"<<endl;return 0;}a=i;}else if(degreechu[i]!=degreeru[i]){fl=1;}}if(t==0&&fl){cout<<"No"<<endl;return 0;}else if(t==0){a=1;cout<<"Hui"<<endl;}else if(t==1){cout<<"Dao"<<endl;}dfs(a);cout<<endl;return 0;}

时间复杂度都是O(n+e)

求解欧拉道路的代码,洛谷P7771
问题在于欧拉道路可能有好几个环拼起来加一段道路,所以说乱走可能走到死胡同没法回退到环,所以说不能随便dfs,需要一些技巧

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>using namespace std;
#define ll long long
#define re register 
int n,m;int heads[100006],nexts[400006];
int tos[400006];
//int oth[400006];
int nums=0;
bool vis[400006];
vector<int>g[100006];
int indeg[100006],oudeg[100006];
inline void adds(int u,int v){tos[++nums]=v;nexts[nums]=heads[u];heads[u]=nums;
}
int tt=0;
int ans[300006];
inline void dfs(int u){int las=0;for(int i=heads[u];i!=0;i=nexts[i]){if(vis[i]){if(i==heads[u]){heads[u]=nexts[i];continue;}nexts[las]=nexts[i];}else{heads[u]=nexts[i];vis[i]=1;dfs(tos[i]);ans[++tt]=tos[i];las=i;}}
}
int main(){scanf("%d%d",&n,&m);for(re int i=1;i<=m;++i){int u,v;scanf("%d%d",&u,&v);g[u].push_back(v);++oudeg[u];++indeg[v];
//		g[v].push_back(u);  }int cnt=0,st=1;for(re int i=1;i<=n;++i){if(indeg[i]!=oudeg[i]){if(cnt>=2){puts("No");return 0;}if(oudeg[i]-indeg[i]==1)st=i;++cnt;}}for(re int i=1;i<=n;++i){sort(g[i].begin() ,g[i].end() );if(g[i].empty())continue;for(re int j=g[i].size() -1;j>=0;--j){adds(i,g[i][j]);}}dfs(st);printf("%d ",st);for(re int i=tt;i>=1;--i)printf("%d ",ans[i]);puts("");return 0;
} 
http://www.jsqmd.com/news/293993/

相关文章:

  • 构建面向 OpenHarmony 的 Flutter 响应式架构
  • 使用Docker Compose搭建LibreNMS网络监控系统
  • 从零到一:我的网络安全入门规划(网络/Web/系统安全方向详解)
  • 【万字解析】网络安全是什么?学完能拿多少?保姆级学习路线+避坑指南
  • 分析北京学校家具生产企业,北京饰界华丰教育科技有限公司性价比如何?
  • 闲置沃尔玛购物卡别放着!不花心思打理真的会亏,快来回收处理吧
  • 2026古筝新手攻略:入门级古筝全面评测推荐,瑶鸾古筝Y106系列/瑶鸾古筝Y103系列(星辰),古筝实力厂家口碑推荐
  • AI绘画2024年趋势分析:NewBie-image-Exp0.1开源模型+弹性GPU部署
  • 企业展厅设计公司哪家好,盛世笔特的全流程服务值得选吗
  • 批量处理太慢?Live Avatar高效生成脚本分享
  • 昆明售后完善的装修公司怎么选?欢乐佳园是靠谱之选
  • multisim14.3下载安装:新手入门必看的完整指南
  • 2026年佛山、广州等地信誉好的抖店代运营公司推荐排名
  • 2026年重庆热门人造雾设备公司排名,锦胜雾森公司概况靠谱规模大!
  • 2026年叔丁醇钾供应企业,叔丁醇钾哪家好?
  • 想当白帽黑客?揭秘网络安全六大高薪岗位与进阶路径(附资源)
  • 基于自适应动态规划的Leader-Following仿真实现
  • 荣耀Android开发面试题及参考答案 - 详解
  • 2026年泳池除湿解决方案:聚焦口碑服务机构,泳池除湿机怎么选技术领航者深度解析
  • STM32知识小结
  • python111-学生在线报名考试管理系统vue3
  • python127-数字中药材资源共享平台vue3
  • python071- 基于智慧校园的大学生综合能力测评系统vue3
  • python072-个性化推荐电影院vue3
  • python081宠物医院门诊管理系统vue3
  • 【毕业设计】基于springboot的运动用品商城系统(源码+文档+远程调试,全bao定制等)
  • python088酒店宾馆客房管理系统设计与实现vue3
  • python090牧民牲畜画像畜牧业养殖数据可视化分析系统vue3
  • python Web的房屋租赁租房管理系统vue3
  • 从夯到拉,锐评大模型岗位|小白程序员必收藏学习指南