图的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;
}