欧拉回路(欧拉路径)
来源:互联网 发布:大数据行业 编辑:程序博客网 时间:2024/04/29 13:54
欧拉通路: 通过图中每条边且只通过一次,并且经过每一顶点的通路。
欧拉回路: 通过图中每条边且只通过一次,并且经过每一顶点的回路。
一:无向图是否具有欧拉通路或回路的判定:
欧拉通路:图连通;图中只有0个或2个度为奇数的节点
欧拉回路:图连通;图中所有节点度均为偶数
二:有向图是否具有欧拉通路或回路的判定:
欧拉通路:图连通;除2个端点外其余节点入度=出度;1个端点入度比出度大1;一个端点入度比出度小1 或 所有节点入度等于出度
欧拉回路:图连通;所有节点入度等于出度
求解欧拉路径的核心算法:void euler(int u) // 深度优先遍历的思想{ for(int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if(!visited[u][v]) { visited[u][v] = visited[v][u] = 1; euler(v); cout<<u<<" "<<v<<endl; // 打印的是逆序,需要正序,就把边<u,v>压入栈中 :e.push(edge(u,v)); } }}示例代码:
#include<iostream>#include<vector>#include<stack>#include<windows.h>#define N 1001using namespace std;bool visited[N][N];int d[N];vector<int> G[N];stack<int> s;void euler(int u){ for(int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if(!visited[u][v]) { visited[u][v] = visited[v][u] = 1; euler(v); cout<<u<<" "<<v<<endl; // 打印逆序的欧拉路径 } }}int main(){ int n,m,i; cin>>n>>m; for(i = 1; i <= m;i++) { int a,b; cin>>a>>b; G[a].push_back(b); G[b].push_back(a); d[a]++; d[b]++; } euler(1); system("pause"); return 0;}
0 0
- 欧拉回路(欧拉路径)
- 欧拉回路(欧拉路径)
- 欧拉路径/回路
- 欧拉回路以及欧拉路径
- 欧拉路径&&欧拉回路
- 欧拉回路、欧拉路径
- 欧拉路径与欧拉回路
- hdu5348(欧拉回路+欧拉路径)
- 欧拉路径/欧拉回路
- 欧拉路径-欧拉回路
- 欧拉路径-欧拉回路
- POJ-3360(欧拉路径和欧拉回路)
- 欧拉回路+欧拉路径(hdu1116)
- the best path(欧拉回路,欧拉路径)
- 欧拉回路路径求解
- 欧拉回路+路径 POJ
- 欧拉回路/路径【总结】
- 欧拉回路--输出欧拉回路的路径
- java计算器程序
- 毕业工作半年记录,加油吧,少年,你还很弱
- @Html内的函数解析。(一)
- 【Cookie Testing】推荐一个好的测试网站!
- C++正则表达式的使用
- 欧拉回路(欧拉路径)
- linux下mysql的卸载、安装全过程
- dictonary按键值进行排序
- java微信开发-之如何获取openid 和用户信息
- CentOS 7 安装Mono 及 Hello World
- C++11标准 STL正则表达式 验证电子邮件地址
- #学志#银行家算法
- java FileWriter 追加文件及文件改名
- 四大组件复习(一)