判欧拉回路或求一个图中欧拉图的个数
来源:互联网 发布:杜月笙 知乎 编辑:程序博客网 时间:2024/05/17 22:38
判欧拉图两个条件首先联通,其次度全部为欧度。那么就很easy了。
题目:hdoj1878
求一个图中欧拉图的个数。
首先通过连通性求出各个子图,然后求子图中奇数度的个数cnt,cnt/2为欧拉图的个数。若子图没有奇数度,则为一个欧拉回路。
题目:hdoj3018Ant Trip
注意这个题目中可能出现孤立点,不算入欧拉图中。
AC代码:
#include <cstdio>#include <vector>#include <iostream>#include <stack>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <vector>using namespace std;const int inf = 0x3f3f3f3f;const int N = 100030;int cnt[N];int ans,cou;vector<int> g[N];bool ok[N];void dfs(int x){ for(int i=0;i<g[x].size();i++) { int to = g[x][i]; if(ok[to]==false) { ok[to] = true; cou+=cnt[to]%2; dfs(to); } }}void solve(int n){ for(int i=1;i<=n;i++){ //欧拉道路 if(ok[i]==false) { if(g[i].size()==0) { ok[i] = true; continue; } cou = cnt[i]%2; ok[i] = true; dfs(i); if(cou==0) ans++; //回路 else ans+=cou/2; } }}int main(){ int n,m; while(~scanf("%d",&n) && n) { memset(cnt,0,sizeof(cnt)); scanf("%d",&m); for(int i=0;i<m;i++) { int x,y; scanf("%d%d",&x,&y); g[x].push_back(y); g[y].push_back(x); cnt[x]++; cnt[y]++; } memset(ok,false,sizeof(ok)); ans = 0; solve(n); printf("%d\n",ans); for(int i=0;i<=n;i++) g[i].clear(); } return 0;}
0 1
- 判欧拉回路或求一个图中欧拉图的个数
- 无向图中欧拉回路的求法 poj1041
- 有向图中欧拉回路的求法
- poj 1637 求混合图的欧拉回路
- 图的欧拉回路
- 欧拉回路(混合图的欧拉回路)
- poj 1637(求混合图的欧拉回路是否存在:构造网络流求解)
- 混合图的欧拉回路
- 混合图的欧拉回路POJ1637
- 混合图的欧拉回路
- 欧拉回路+图的连通性
- 混合图的欧拉回路
- 混合图的欧拉回路
- 混合图的欧拉回路
- 混合图的欧拉回路求法
- 欧拉回路 欧拉通路 欧拉回路图
- poj1637 判断一个混合图是否存在欧拉回路
- 数据结构实验之图论八:欧拉回路 无向图的欧拉回路判断
- 将session放到memcache上面
- 从1000张表导出数据并在hive中去重
- Eclipse快捷键与使用技巧总结
- android CheckBox控件的定义及事件监听
- Linux 网络编程—— libpcap 详解
- 判欧拉回路或求一个图中欧拉图的个数
- 【日常学习】【最短路Dijkstra】codevs1069 usaco回家 题解
- SVM通俗讲义
- Mac系统终端命令行不执行命令 总出现command not found解决方法
- VC调用matlab中定义的.m文件中的函数的实例
- ScrollView嵌套ListView,GridView,ViewPager,以及这些控件自动滚动到底部问题的解决
- appium robotframework 真机测试体验
- ipa终端打包
- Android动态创建表格 .