实验环境:win10, DEV C++5.11 

实验要求:

  实现图的深度优先遍历

实验代码:

#include <iostream>
#define maxSize 255
#include "stdlib.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*the definition of struct*/
typedef struct ArcNode{
    int adjvex;
    struct ArcNode * nextarc;
    int info;
}ArcNode;
typedef struct{
    char data;
    ArcNode *firstarc;    
}VNode;
typedef struct{
    VNode adjlist[maxSize];
    int n,e;
}AGraph;
/*to create the adjoin graph*/
void createGraph(AGraph &G){
    G.adjlist[0].data='a';
    G.adjlist[1].data='b';
    G.adjlist[2].data='c';
    G.adjlist[3].data='d';
    G.adjlist[4].data='e';
    G.adjlist[5].data='f';
    G.n=6;
    G.adjlist[0].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[0].firstarc->adjvex=1;
    G.adjlist[0].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[0].firstarc->nextarc->adjvex=3;
    G.adjlist[0].firstarc->nextarc->nextarc=NULL;    
    G.adjlist[1].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[1].firstarc->adjvex=0;
    G.adjlist[1].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[1].firstarc->nextarc->adjvex=2;
    G.adjlist[1].firstarc->nextarc->nextarc=NULL;    
    G.adjlist[2].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[2].firstarc->adjvex=1;
    G.adjlist[2].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[2].firstarc->nextarc->adjvex=3;
    G.adjlist[2].firstarc->nextarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[2].firstarc->nextarc->nextarc->adjvex=4;
    G.adjlist[2].firstarc->nextarc->nextarc->nextarc=NULL;    
    G.adjlist[3].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[3].firstarc->adjvex=0;
    G.adjlist[3].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[3].firstarc->nextarc->adjvex=2;
    G.adjlist[3].firstarc->nextarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[3].firstarc->nextarc->nextarc->adjvex=4;
    G.adjlist[3].firstarc->nextarc->nextarc->nextarc=NULL;    
    G.adjlist[4].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[4].firstarc->adjvex=2;
    G.adjlist[4].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[4].firstarc->nextarc->adjvex=3;
    G.adjlist[4].firstarc->nextarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[4].firstarc->nextarc->nextarc->adjvex=5;
    G.adjlist[4].firstarc->nextarc->nextarc->nextarc=NULL;    
    G.adjlist[5].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
    G.adjlist[5].firstarc->adjvex=4;
    G.adjlist[5].firstarc->nextarc=NULL;
    G.e=6;    
}
int isVisit[maxSize]={0};
void visit(AGraph &G,int v){
    printf("%c",G.adjlist[v].data);
}
/*deepth first search using recursive*/
void DFS(AGraph &G,int v){
    ArcNode *p;
    isVisit[v]=1;
    visit(G,v);
    p=G.adjlist[v].firstarc;
    while(p!=NULL){
        if(isVisit[p->adjvex]==0)
            DFS(G,p->adjvex);
        p=p->nextarc;
    }        
}
//for finding the adjoin arc of the vertex
//void searchG(AGraph &G,int i){
//    ArcNode * p=G.adjlist[i].firstarc;
//    while(p!=NULL){
//        printf("%c",G.adjlist[p->adjvex].data);
//        p=p->nextarc;
//    }
//}
int main(int argc, char** argv) {
    AGraph G;
    createGraph(G);    
    //searchG(G,1);
    printf("the deepth searth using recursive:\n");
    DFS(G,0);
    getchar();
    return 0;
}

运行结果: