6-15 图的深度遍历-邻接表实现

 图的深度遍历-邻接表实现 (10 分)

本题要求实现邻接表存储图的深度优先遍历。

函数接口定义:


void DFS(ALGraph *G,int i);

其中ALGraph是邻接表存储的图,定义如下:

#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;                 /*图类型*/

裁判测试程序样例:


#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;
}
/* 你的代码将被嵌在这里 */

对于给定图:

《6-15 图的深度遍历-邻接表实现》

输入样例:

5

输出样例:

DFS from 5: 5 1 3 0 2 4 6

void DFS(ALGraph *G, int i) {
    printf(” %d”, G->vertices[i].data);   
    visited[i] = TRUE;      // 访问该节点并标记为已读
    for (ArcNode *it = G->vertices[i].firstarc; it != NULL; it = it->nextarc)  //遍历当前结点的邻接节点
        if (visited[it->adjvex] == FALSE)//如果未读则进行访问
            DFS(G, it->adjvex);     // 向深层遍历
    return;  //返回后遍历同层次

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/lannister_awalys_pay/article/details/85056693
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞