fleury 算法模版

来源:互联网 发布:linux close函数 编辑:程序博客网 时间:2024/05/21 13:29

上面是书上的定义,还是没怎么看懂啊~。



模版代码:

#include<bits/stdc++.h>using namespace std;const int maxn = 105;int n,m;bool edge[maxn][maxn];int start;//起点 int num;//奇度顶点的个数 int degree[maxn];//顶点的度 stack<int> st;void input(){int u,v;scanf("%d%d",&n,&m);for(int i = 0; i < m; i++){scanf("%d%d",&u,&v);edge[u][v] = edge[v][u] = 1;degree[u]++; degree[v]++;}num = 0; start = 1;for(int i = 1; i <= n; i++){if(degree[i]&1){start = i; num++;}}}void dfs(int s){st.push(s);for(int i = 1; i <= n; i++){if(edge[s][i] > 0){edge[s][i] = edge[i][s] = 0;dfs(i);break;}}}void fleury(int s){bool flag;st.push(s);while(!st.empty()){flag = 0;for(int i = 1; i <= n; i++){if(edge[st.top()][i] > 0){flag = 1; break;}}if(flag){int x = st.top();st.pop();dfs(x);}else{printf("%d ",st.top());st.pop();}}}void solve(){if(num == 0 || num == 2) fleury(start);else puts("No Euler path");}int main(){input();solve();return 0;}/*input:9 141 21 82 32 82 93 44 54 64 95 66 76 97 88 9output:1 8 9 6 7 8 2 9 4 6 5 4 3 2 1*/


0 0
原创粉丝点击