求助(玄关)

题目总版

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 谢谢,已关。


|