上面是书上的定义,还是没怎么看懂啊~。
模版代码:
#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 14
1 2
1 8
2 3
2 8
2 9
3 4
4 5
4 6
4 9
5 6
6 7
6 9
7 8
8 9
output:
1 8 9 6 7 8 2 9 4 6 5 4 3 2 1
*/