hdu 1878 欧拉回路
2015-07-22 20:50
357 查看
欧拉路径是指在图中每个边只遍历一遍 能够走完所有边
欧拉回路是欧拉路径且最后起点和终点重合
判断一个无向图中是否存在欧拉回路的充要条件是 每个顶点的度都是偶数且为连同图
一个有向图是否为欧拉图的充要条件为 每个顶点的出度等于入度 且为连通图
下面的题目在判断时很简单 只用了一次bfs就判断了图的连通性
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1878
欧拉回路是欧拉路径且最后起点和终点重合
判断一个无向图中是否存在欧拉回路的充要条件是 每个顶点的度都是偶数且为连同图
一个有向图是否为欧拉图的充要条件为 每个顶点的出度等于入度 且为连通图
下面的题目在判断时很简单 只用了一次bfs就判断了图的连通性
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1878
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <queue> using namespace std; const int maxn=1010; int g[maxn][maxn]; int angle[maxn];//每个顶点的度 int vis[maxn];//bfs中的访问标志 int n,m;//n为顶点个数 m为边的个数 bool judge() { for(int i=1;i<=n;i++)//检查每个顶点的度是都为偶数 if(angle[i]&1) return false; memset(vis,0,sizeof(vis));//清空访问数组 queue<int> q;//用bfs检查无向图的连同性 int empty; q.push(1); while(!q.empty()) { empty=q.front(); q.pop(); vis[empty]=1; for(int i=1;i<=n;i++) { if(!vis[i]&&g[empty][i])//如果i点没有被访问过 且和empty顶点相连则压入栈 { q.push(i); } } } for(int i=1;i<=n;i++)//检查图的连通性 if(!vis[i])return false; return true; } int main(int argc,char *argv[]) { while(scanf("%d",&n)!=EOF) { if(n==0)break; scanf("%d",&m); int a,b; memset(g,0,sizeof(g));//输入矩阵清空 memset(angle,0,sizeof(angle));//度清空 for(int i=0;i<m;i++)//输入m个边 { scanf("%d %d",&a,&b); g[a][b]=g[b][a]=1; angle[a]++; angle[b]++; } if(!judge())puts("0"); else puts("1"); } return 0; }
相关文章推荐
- 循环结构小例子(1)
- HDU_2594 Simpsons’ Hidden Talents
- NYOJ 35 表达式求值
- 什么是系统的抖动,它有什么危害?
- hdu1998 奇数阶魔法 (数组填数)
- [leedcode 115] Distinct Subsequences
- Java对象生命周期
- Java各种Synchronizer: CountDownLatch, CyclicBarrier,Semaphore
- Java图形界面编程生成exe文件
- Java图形界面编程生成exe文件
- 挑剔的小杜
- Teamcenter WorkFlow(二)
- [Android&Java]浅谈设计模式-代码篇:观察者模式Observer
- 第一次写博客,为自己学习apue的每一步做好记录
- poj 2762 Going from u to v or from v to u?
- 【树结构】SPOJ QTREE2
- hd2137
- 利用WIFI(不用数据线)连接Android手机进行调试
- poj 3207 Ikki's Story IV - Panda's Trick 【2-sat 经典建模】
- linux 日志服务器的构建