欧拉回路模板
2016-03-18 20:01
288 查看
#include<iostream> #include<stack> const int MAXN=111; using namespace std; stack<int>S; int edge[MAXN][MAXN]; int n,m; void dfs(int x){ S.push(x); for(int i=1;i<=n;i++){ if(edge[x][i]>0){ edge[i][x]=edge[x][i]=0;//删除此边 dfs(i); break; } } } //Fleury算法的实现 void Fleury(int x){ S.push(x); while(!S.empty()){ int b=0; for(int i=1;i<=n;i++){ if(edge[S.top()][i]>0){ b=1; break; } } if(b==0){ printf("%d",S.top()); S.pop(); }else { int y=S.top(); S.pop(); dfs(y);//如果有,就dfs } } printf("\n"); } int main(){ scanf("%d%d",&n,&m); //读入顶点数以及边数 memset(edge,0,sizeof(edge)); int x,y; for(int i=1;i<=m;i++){ scanf("%d%d",&x,&y); edge[x][y]=edge[y][x]=1; } //如果存在奇数顶点,则从奇数顶点出发,否则从顶点0出发 int num=0,start=1; for(int i=1;i<=n;i++){ //判断是否存在欧拉回路 int degree=0; for(int j=1;j<=n;j++){ degree+=edge[i][j]; } if(degree&1){ start=i,num++; } } if(num==0||num==2){ Fleury(start); }else printf("No Euler Path\n"); return 0; }
相关文章推荐
- java内部类
- IOS 网络浅析-(七 JSON解析之三方JSONKit)
- 在DOS下的DEBUG命令的详细用法
- 复习下链表
- Linux--进程间通信(管道及有名管道FIFO)(转)
- HDOJ 2001 计算两点间的距离(利用对象方法)
- 【bzoj 3190】 赛车 题解&代码(C++)
- 经典题:用树状数组求逆序数+离散化(3743)
- 浅谈JSON数据解析方法
- Java进阶学习规划
- php中rsa加密解密验证
- 一致性哈希应用
- Python安装cx_Oracle
- 编译
- poj-1961-Period
- Leetcode:303. Range Sum Query - Immutable(JAVA)
- 24. Swap Nodes in Pairs
- 基于TCP协议的Socket编程,实现文件的上传
- iOS获取系统短信,发送指定短信内容
- Constructing Roads