图的遍历

发布时间 2023-11-06 22:19:54作者: 我捏的

//DFS
void DFSTravel(Graph G){
    for(i=0,i<G.vexnum,i++){
        visited[i]=false;
    }
    for(i=0,i<G.vexnum,i++){
        DFS(G,i);
    }

void DFS(Graph G,int v){
    visit(v);
    visited[v]=true;
    for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w)){
        if(!visited[w])
           DFS(G,w);
    }
}
//BFS
void BFSTravel(Graph G){
    InitQueue(Q);
    for(i=0,i<G.vexnum,i++){
        visited[i]=false;
    }
    for(i=0,i<G.vexnum,i++){
        BFS(G,i);
    }
}

void BFS(Graph G,int v){
    visit[v];
    visited[v]=true;
    Enqueue(Q,v);
    while(!isEmpty(Q)){
        DeQueue(Q,p);
        for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w)){
           if(!visited[w]){
               visit[w];
               visited[w]=true;
               EnQueue(Q,w);
        }
    }
}
//DFS非递归
void DFS_No_RC(Graph G){
    InitStack(S);
    for(i=0,i<G.vexnum,i++){
        visited[i]=false;
    }
    visited[v]=true;
    Push(S,v)
    while(!isEmpty(S)){
        k=pop(S);
        visit(k);
        for(w=FirstNeighbor(G,k);w>=0;w=NextNeighbor(G,k,w)){
           if(!visited[w]){
               visited[w]=true;
               push(S,w);
        }
    }
}