#include<bits/stdc++.h>
using namespace std;
#define M 200005
#define N 100005
struct Edge{
int to,next;
}edge[M];
int head[N];
int tot=0;
void add(int u,int v){
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
}
bool vis[N];
void dfs(int cur){
vis[cur]=true;
cout<<cur<<' ';
for(int i=head[cur];~i;i=edge[i].next){
if(!vis[edge[i].to])
dfs(edge[i].to);
}
}
int main(){
memset(head,-1,sizeof(head));
//map
add(1,2);
add(2,5);
add(1,4);
add(1,3);
add(4,5);
add(5,3);
for(int u=1;u<=5;u++){
cout<<"node "<<u<<"'s message:"<<endl;
cout<<"head["<<u<<"]:"<<head[u]<<endl;
for(int i=head[u];~i;i=edge[i].next){
cout<<"edge["<<i<<"].to="<<edge[i].to<<" ";
cout<<"edge["<<i<<"].next="<<edge[i].next<<" ";
puts("");
}
}
for(int u=1;u<=5;u++){
cout<<"from node "<<u<<" start,the result of dfs is:"<<endl;
dfs(u);
puts("");
memset(vis,0,sizeof(vis));
}
return 0;
}
output:
node 1's message:
head[1]:3
edge[3].to=3 edge[3].next=2
edge[2].to=4 edge[2].next=0
edge[0].to=2 edge[0].next=-1
node 2's message:
head[2]:1
edge[1].to=5 edge[1].next=-1
node 3's message:
head[3]:-1
node 4's message:
head[4]:4
edge[4].to=5 edge[4].next=-1
node 5's message:
head[5]:5
edge[5].to=3 edge[5].next=-1
from node 1 start,the result of dfs is:
1 3 4 5 2
from node 2 start,the result of dfs is:
2 5 3
from node 3 start,the result of dfs is:
3
from node 4 start,the result of dfs is:
4 5 3
from node 5 start,the result of dfs is:
5 3