flypig114 @ 2024-08-08 14:28:49
#include<iostream>
#include<cstdio>
using namespace std;
int A[501][501];
int n;
int B[501];
void dfs(int i){
printf("%d\n",i);
for(int j=1;j<=500;j++){
if(A[i][j]>=1){
A[i][j]--;
A[j][i]--;
dfs(j);
}
}
}
int main(){
int a,b,start=1;
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d%d",&a,&b);
A[a][b]+=1;
A[b][a]+=1;
B[a]++;
B[b]++;
}
for(int i=1;i<=500;i++){
if(B[i]%2==1) {
start=i;
break;
}
}
dfs(start);
}
QWQ
by wangzilan52 @ 2024-08-09 08:52:35
第1个点的出度可能为0,所以start要取输入的顶点的最小值(如果你WA#1
by boy♂Next♂dooor @ 2024-08-27 16:32:11
@wangzilan52 "一个顶点上至少连接 1 个栅栏" 怎么会出度为0呢?
by follow_mashiro @ 2024-09-02 14:13:21
有可能压根没有1号节点
1号数据: 3
2 3
3 4
4 2