当前位置:   article > 正文

图的深度优先遍历(代码实现)

图的深度优先遍历(代码实现)

领接矩阵实现


#include"stdio.h"
#include"stdlib.h"
typedef enum{FALSE,TRUE} Boolean;
#define MaxVertexNum 10     /*定义最大顶点数*/
typedef int Vertex;/* 用顶点下标表示顶点,为整型 */
typedef struct{
    int arcs[MaxVertexNum][MaxVertexNum]; /*邻接矩阵*/
    int vexnum,arcnum; /*图中的顶点数vexnum和边数arcnum*/
}MGraph; /*用邻接矩阵表示的图的类型*/
Boolean visited[MaxVertexNum]; /* 顶点的访问标记 */
void CreatMGraph(MGraph *G);/* 创建图并且将Visited初始化为false;裁判实现,细节不表 */
void DFS(MGraph G,Vertex v);
int main()
{
    Vertex v;
    MGraph G;
    CreatMGraph(&G);
    scanf("%d", &v);
    printf("DFS from %d:",v);
    DFS(G,v);     
    return 0;
}
/* 你的代码将被嵌在这里 */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

具体代码如下:

void DFS(MGraph G,Vertex v)
{
    printf(" %d",v);
    visited[v]=1;
    for(int w=0;w<G.vexnum;w++)//依次检查领接矩阵v所在行
    {
        if((G.arcs[v][w]!=0)&&(!visited[w]))
            DFS(G,w);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

领接表实现:


#include"stdio.h"
#include"stdlib.h"
#define MAX_VERTEX_NUM 10      /*定义最大顶点数*/
typedef int Vertex;
typedef struct  ArcNode{       /*表结点*/
    int adjvex;               /*邻接点域*/
    struct  ArcNode *nextarc; /*指向下一个表结点*/
}ArcNode;
typedef struct VNode{           /*头结点*/
    Vertex data;                  /*顶点域*/
    ArcNode *firstarc;          /*指向第一个表结点*/
}VNode,AdjList[MAX_VERTEX_NUM]; /*AdjList是数组类型*/
typedef struct { 
    AdjList vertices;           /*邻接表中数组定义*/
    int vexnum,arcnum;          /*图中当前顶点数和边数*/
} ALGraph;                 /*图类型*/
typedef enum{FALSE,TRUE} Boolean;
Boolean visited[MAX_VERTEX_NUM];/*定义标志向量,为全局变量*/
void CreatALGraph(ALGraph *G);/* 创建图并且将Visited初始化为false;裁判实现,细节不表 */
void DFS(ALGraph *G,int v);
int main()
{
    Vertex v;
    ALGraph G;
    CreatALGraph(&G);
    scanf("%d", &v);
    printf("DFS from %d:",v);
    DFS(&G,v);     
    return 0;
}
/* 你的代码将被嵌在这里 */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

具体代码如下:

void DFS(ALGraph *G,int i)
{
    ArcNode *pre;
    visited[i]=1;
    printf(" %d",i);
    for(pre=G->vertices[i].firstarc;pre!=NULL;pre=pre->nextarc)
    {
        if(visited[pre->adjvex]==0)
        {
            DFS(G,pre->adjvex);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/509706
推荐阅读
相关标签
  

闽ICP备14008679号