博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hrbeu 哈工程 Eular Graph
阅读量:6150 次
发布时间:2019-06-21

本文共 2074 字,大约阅读时间需要 6 分钟。

欧拉回路裸题,给定n个点和m条有向边,判断该图是否为欧拉回路

有向图欧拉回路判断条件有:图连通,所有点的度为偶数

 

代码一,用并查集来判断图是否连通,然后逐一扫描所有点的度是否为偶数

#include 
#include
#define N 110int n,m;int d[N];int p[N];int find(int x) //并查集{ return p[x]==x ? x : find(p[x]); }int main(){ int CASE,i,j,u,v,x,y,ok; scanf("%d",&CASE); while(CASE--) { scanf("%d%d",&n,&m); memset(d,0,sizeof(d)); for(i=1; i<=n; i++) p[i]=i; for(i=1; i<=m; i++) { scanf("%d%d",&u,&v); d[u]++; d[v]++; x=find(u); y=find(v); if(x!=y) p[u]=v; }// for(i=1; i<=n; i++) printf("%d ",find(i)); printf("\n"); for(ok=1,i=1 ;i

 

代码二,直接用邻接矩阵来建图,然后dfs整个图看有多少个连通分量,当只有一个连通分量时说明图连通,然后再逐一判断所有点的度是否为偶数

#include 
#include
#define N 110bool g[N][N],vis[N];int d[N];int n,m;void dfs(int i){ int j; for(j=1; j<=n; j++) if( g[i][j] && !vis[j]) { vis[j]=1; dfs(j); } }int main(){ int T,i,u,v,count; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(g,0,sizeof(g)); memset(vis,0,sizeof(vis)); memset(d,0,sizeof(d)); for(i=1; i<=m; i++) { scanf("%d%d",&u,&v); g[u][v]=1; d[u]++; d[v]++; } for(count=0,i=1; i<=n; i++) if(!vis[i]) { ++count; vis[i]=1; dfs(i);} if(count>1) printf("no\n"); else { for(i=1; i<=n; i++) if( d[i]%2 ) break; if(i>n) printf("yes\n"); else printf("no\n"); } } return 0;}

转载地址:http://wxgya.baihongyu.com/

你可能感兴趣的文章
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>
mysql内存优化
查看>>
都市求生日记第一篇
查看>>
Java集合---HashMap源码剖析
查看>>
SQL优化技巧
查看>>
thead 固定,tbody 超出滚动(附带改变滚动条样式)
查看>>
Dijkstra算法
查看>>
css 动画 和 响应式布局和兼容性
查看>>