图的dfs与树的dfs

区别在于图的可达性。如果由任意节点出发(以任意节点为根)可以到达所有节点,
那么遍历就只需要跑一次dfs;若可达性无法保证,则需要多次运行dfs;

#include<bits/stdc++.h>
using namespace std;
#define N  10001
int m,n;
int vt[N];
int pre[N][N];
int f[N];
vector<int>v[N];

void dfs(int now)
{
    //cout<<now<<endl;
    cout<<now<<"->";
    for(int i=0;i<v[now].size();i++)
    {
        int nt=v[now][i];
        //cout<<"nt:"<<nt<<endl;
        if(!vt[nt])
        {
            vt[nt]=1;
            dfs(nt);
        }
    }
}
int main() 
{
    cin>>n>>m;
    int x,y,z;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y;
        v[x].push_back(y);
    }
    int ct=0;
    for(int i=1;i<=n;i++)
    {
        if(!vt[i])
        {
            vt[i]=1;
            dfs(i);
            cout<<endl;
        } 
    }
    return 0;
}
posted @ 2024-12-07 09:29  邓佑孤  阅读(15)  评论(0编辑  收藏  举报