链接:点击打开链接
题意:给出n个点m条边的无向图输出欧拉路径
代码:
#include <map>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,s[1005][1005];
vector<int> ans;
void dfs(int S){
int i;
for(i=1;i<=n;i++){
if(s[S][i]){
s[S][i]--,s[i][S]--;
dfs(i);
}
}
ans.push_back(S); //就是不断删边尽可能往前走
} //不行就回溯
int main(){
int i,j,u,v;
while(scanf("%d%d",&n,&m)!=EOF){
ans.clear();
memset(s,0,sizeof(s));
for(i=1;i<=m;i++){
scanf("%d%d",&u,&v);
s[u][v]++,s[v][u]++;
}
dfs(1);
for(i=0;i<ans.size();i++){ //无向图正向逆向皆可,有向图逆序输出
if(i!=0)
printf(" ");
printf("%d",ans[i]);
}
printf("\n");
}
return 0;
}