Danny_chan @ 2024-11-27 22:36:23
这里
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int>a[100010];
int cnt=0;
stack<int>s;
void dfs(int x){
for(int i=0;i<a[x].size();i++){
if(a[x][i]==0) continue;
int u=a[x][i];
a[x][i]=0;
for(int j=0;j<a[u].size();j++){
if(a[u][j]==x){
a[u][j]=0;
}
}
dfs(u);
}
s.push(x);
}
int main(){
cin>>n>>m;
while(m--){
int x,y;
cin>>x>>y;
a[x].push_back(y);
}
int x=0;
for(int i=1;i<=n;i++){
if(a[i].size()==0){
cout<<"No";
return 0;
}
if(a[i].size()%2==1){
cnt++;
x=i;
}
}
if(cnt!=0&&cnt!=2){
cout<<"No";
return 0;
}
if(cnt==0){
dfs(x);
}
if(cnt==2){
dfs(1);
}
while(!s.empty()){
cout<<s.top()<<" ";
s.pop();
}
return 0;
}
by Alemirai @ 2024-11-29 07:27:03
1.当 cnt=2 时,才是 dfs(x)
否则 是 dfs(1)
你两个判断条件写反了
2.不能单纯以度数为奇数的点作为 dfs 起点 即 x,而是要以出度比入度大一的点作为 dfs 起点
by Danny_chan @ 2024-11-29 17:24:50
@Alemirai 谢谢,已关。