//邻接矩阵表示
//实现图的深度优先遍历(DFS)
const int maxv=1000;//定义图中最大节点数
const int INF=MAX_INT;
int n;//输入节点数
int G[maxv][maxv]={INF};
bool visited[maxv]={false};

void DFS(int v,int depth){
visited[v]=true;//标记已访问
for(int i=0;i<n;i++){
if(visited[i]==false&&G[v][i]!=INF){//查找v未访问的邻接点
DFS(i,depth+1);
}
}
}

void traverse(){//对图进行遍历
for(int i=0;i<n;i++){
if(visited[i]==false)
DFS(i,0);//对所有连通块进行遍历,初始层为0
}
}
//邻接表表示
vector<int> Adj[maxv];
int n;
bool visited[maxv]={false};

void DFS(int v,int depth){
visited[v]=true;
for(int i=0;i<Adj[v].size();i++){
int num=Adj[v][i];
if(visited[num]==false)
DFS(num,depth+1);
}
}

void traverse(){
for(int i=0;i<n;i++){
if(visited[i]==false)
DFS(i,0);
}
}