> 文档中心 > 图---DFS

图---DFS

目录:

    • 实现方法:
    • 定义结构体:
    • 初始化图:
    • 创建图:
    • DFS遍历
    • 测试:
    • 输出结果:
    • 结果分析:

实现方法:

Graph *initgraph(int vexNum);//初始化图void creat_graph(Graph *graph,char *vexs,int *arcs);//创建图//void creat_graph(Graph *graph,char *vexs,int (*arcs)[5]);//创建图void DFS(Graph *graph,int *flag,int index);//DFS遍历

定义结构体:

#include #include typedef struct Graph{    char *vexs;     //  顶点元素    int **arcs;     //  邻接表    int vexNum;     //  顶点数量    int arcsNum;    //  边数量}Graph;

初始化图:

Graph *initgraph(int vexNum){    Graph *graph = (Graph *)malloc(sizeof(Graph));    graph->vexs = (char *)malloc(sizeof(char) * vexNum);    //为顶点元素申请内存空间    graph->arcs = (int **)malloc(sizeof(int *) * vexNum);   //指针数组(存储一维数组首地址)    for(int i = 0;i < vexNum;i++)    { graph->arcs[i] = (int *)malloc(sizeof(int) * vexNum);   //为一维数组申请内存空间    } graph->vexNum = vexNum;     //初始化顶点数量    graph->arcsNum = 0;  //初始化边数量    return graph;}

创建图:

void creat_graph(Graph *graph,char *vexs,int *arcs){    for(int i = 0;i < graph->vexNum;i++)    { graph->vexs[i] = vexs[i];//为顶点赋值 for(int j = 0; j < graph->vexNum;j++) {     graph->arcs[i][j] = *(arcs + i * graph->vexNum + j) ;      //创建邻接表     if(graph->arcs[i][j] != 0)    //二维数组不等于0是存在边,边数加 1  graph->arcsNum ++; }    }    for(int i = 0;i < graph->vexNum;i++)    {  for(int j = 0; j < graph->vexNum;j++) {     printf("%d\t",graph->arcs[i][j]); } printf("\n");    } printf("\n");    graph->arcsNum /= 2;    //无向图两顶点之间是没有方向的,}

DFS遍历:

void DFS(Graph *graph,int *flag,int index){    //打印结点内容    printf("%c\t",graph->vexs[index]);    //标记已访问    flag[index] = 1;    //遍历二维数组    for(int i = 0;i < graph->vexNum;i++)    {   //如果未访问过且存在边的关系则访问结点 if(graph->arcs[index][i] == 1 && !flag[i]) {     DFS(graph,flag,i); }    }}

测试:

#include "graph.h"void main(){    Graph *graph = initgraph(5);    int *flag = (int *)malloc(sizeof(int) * graph->vexNum);    for(int i = 0;i < graph->vexNum;i++)    { flag[i] = 0;    }    int arcs[5][5] = { 0,1,1,1,0, 1,0,1,1,1, 1,1,0,0,0, 1,1,0,0,1, 0,1,0,1,0    };    creat_graph(graph,"ABCDE",(int *)arcs);    printf("DFS遍历结果:\n");    DFS(graph,flag,0);    printf("\n"); system("pause");    return ;}

输出结果:

在这里插入图片描述

结果分析:

在这里插入图片描述
在这里插入图片描述
声明:此文章为学习笔记,如有侵权请联系删除。