AOJ上的DFS基础题
题目就不上了
返回两个数组,一个存发现节点的时间,一个存结束查找该节点的时间
#include<iostream>
using namespace std;
#define N 100
int graph[N][N];
int d[N];
int f[N];
int n;
int time;
void DFS(int v){
time++;
d[v-1]=time;
for(int i=0;i<n;i++){
if(graph[v-1][i]>0 && d[i]==0){
DFS(i+1);
}
}
time++;
f[v-1] = time;
return ;
}
int check(){
for(int i=0;i<n;i++){
if(d[i]>0){
continue;
}
return i+1;
}
return -1;
}
void OutPut(){
for(int i=0;i<n;i++){
cout<<i+1<<" "<<d[i]<<" "<<f[i]<<endl;
}
}
int main(){
int c,l;
int arc;
time = 0;
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
graph[i][j] = 0;
for(int i=0;i<n;i++){
d[i]=0;
f[i]=0;
}
for(int i=0;i<n;i++){
cin >> c;
cin >> arc;
for(int j=0;j<arc;j++){
cin>> l;
graph[c-1][l-1]=1;
}
}
while(check()!=-1){
DFS(check());
}
OutPut();
return 0;
}