图的深度遍历算法

问题描述:
输入:
建立图的存储结构:顶点和边(弧),例:无向图G的顶点V={A,B,C,D,E,F,G,H},边E={(A,B),(A,C),(B,D),(B,E),(C,F),(C,G),(D,H),(E,H),(F,G)}(G具有8个顶点和9条边)
输出:
深度优先遍历的顶点序列(按照存储结构):A,B,D,H,E,C,F,G(或者其它的不同顺序的序列)`
c语言实现代码:

#include 
    #define Max 10
    typedef char VertexType;
typedef int EdgeType;
typedef struct 
{
VertexType vexs[Max]; // 顶点信息
    EdgeType edges[Max][Max];//边和弧的信息
    int n;  //当前图顶点数
    int e;  //当前边数
}MGraph;

void createGraph(MGraph *G){//创建图
    int i,j,n,e,a,la,k;
    char ex;
    printf("请输入图的顶点数(小于10):\n");
    scanf("%d",&n); 
    G->n=n;
    printf("请输入所有顶点的信息(如:a b):\n");
    getchar();
    for(i=0;iscanf("%c",&G->vexs[i]);
    getchar();  
    } 
    printf("请输入图的边数:");
    scanf("%d",&e);
    G->e=e;
    for(i=0;ifor(j=0;j//printf("%c和%c:",G->vexs[i],G->vexs[j]); 
        //  scanf("%d",&a);
        G->edges[i][j]=0;
        }

    }
    printf("请输入边的信息(若两点相连就输入 1):\n");
    for(i=0;iprintf("%c和几个点相连请输入:",G->vexs[i]); 
        scanf("%d",&la);
            printf("%c和哪些点相连请输入(如:a b):",G->vexs[i]);
            getchar();
        for(k=0;kscanf("%c",&ex);
            getchar();
        G->edges[i][ex-'a']=1;
        }
    }

}
void prinG(MGraph *G){//输出矩阵
    int i,j;
    for(i=0;in;i++){
        printf("  %c",G->vexs[i]);
    }
printf("\n");
    for(i=0;in;i++){
        printf("%c",G->vexs[i]);
        for(j=0;jn;j++){
            printf("  %d",G->edges[i][j]);
        }
        printf("\n");
    }
}
void DFT(MGraph *G,int visited[]){   //深度遍历
        int i;
        for(i=0;in;i++){  
                DFTcore(G,i,visited);  
        }  
        printf("\n");  
}  
int DFTcore(MGraph *G,int i,int visited[]){ //递归查找
        int j; 
        if(visited[i] == 1){  
                return;  
        }  
        printf("%c ",G->vexs[i]);  
        visited[i] =1;   
        for(j=0;jn;j++){  
                if(G->edges[i][j]==1){  
                        DFTcore(G,j,visited);  
                }  
        }  
}
int main(){
    MGraph G;
    int visited[Max]={0};
    createGraph(&G);
    prinG(&G);
    printf("进行深度遍历:");
    DFT(&G,&visited);
    return 0;
}


图的深度遍历算法_第1张图片

图的深度遍历算法_第2张图片

代码用作自己储存,同时希望对你有帮助

你可能感兴趣的:(数据结构)