DFS序

e数组建图(树),st[i]代表i入栈时间,en[i]代表i出栈时间,ti代表时间
例题

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,dfsx[N],st[N],en[N],ti;
vector<int>e[N];
inline void dfs(int u,int fa){
    st[u]=++ti;
    dfsx[ti]=u;
    for(auto i : e[u]){
        if (i!=fa){
            dfs(i,u);
        }
    }
    en[u]=ti;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for(int i=1;i<n;i++){
        int from,to;
        cin>>from>>to;
        e[from].push_back(to);
        e[to].push_back(from);
    }
    for(int i=1;i<=n;i++){
        sort(e[i].begin(),e[i].end());
    }
    dfs(1,0);
    for(int i=1;i<=n;i++){
        cout<<dfsx[i];//输出dfs序
    }
    cout<<"\n";
    for(int i=1;i<=n;i++){
        cout<<st[i];//输出入栈时间
    }
    cout<<"\n";
    for(int i=1;i<=n;i++){
        cout<<en[i];//输出出栈时间
    }
    return 0;
}
posted @ 2026-10-04 19:13  Emoji-happy  阅读(2)  评论(0)    收藏  举报