hdu 1878 欧拉回路
来源:互联网 发布:mac os x 最新版本 编辑:程序博客网 时间:2024/06/10 10:37
欧拉路径是指在图中每个边只遍历一遍 能够走完所有边
欧拉回路是欧拉路径且最后起点和终点重合
判断一个无向图中是否存在欧拉回路的充要条件是 每个顶点的度都是偶数且为连同图
一个有向图是否为欧拉图的充要条件为 每个顶点的出度等于入度 且为连通图
下面的题目在判断时很简单 只用了一次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 0
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- 【欧拉回路】hdu 1878
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU-1878-欧拉回路
- Hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU-1878 欧拉回路
- HDU 1878 欧拉回路
- NYOJ 35 表达式求值
- SDNU 1141.Greatest Number【山东省第一届ACM】【7月22】
- js 动画3 完美框架
- 循环结构小例子(1)
- HDU_2594 Simpsons’ Hidden Talents
- hdu 1878 欧拉回路
- ios的类别(category)和扩展(Extension)
- Android中的回调函数使用
- [HDU 1003] Max Sum
- Qt第一篇:
- HDU 5294 Tricks Device (最短路上的最小割) 2015多校训练1007
- 线程状态流转图
- HDOJ 2037 今年暑假不AC(贪心)
- PAT (Basic Level) Practise (中文)1028. 人口普查(20)C语言