图的深度优先遍历-数据结构(20)

一、图的深度优先遍历(点的遍历)

还是要再强调一遍,深度优先遍历的是点,是点,是点。这是一种递归的思想,对于当前的结点,如果有邻边,而且邻边的点没有被遍历则进行深度递归。

二、算法与数据结构

1、十字链表

略,参考上一节

2、深度优先遍历算法

//==========================深度优先遍历 是对点的遍历=======================
bool visited[MAX_VERTEX_NUM];
//递归深度优先遍历
void DFS(OLGraph G, int v){
	//当前结点设置已经查找过
	visited[v] = true;
	printf("%c", G.xlist[v].data);
	//printf();
	//进入到下一个结点, 如果下一个结点没有被访问过则进行 递归
	ArcBox * arc = G.xlist[v].firstout;
	while (arc != NULL)
	{
		//当前V这个结点有邻接点的情况 //进入深度递归
		int w = arc->headvex;
		if (visited[w] == false)
		{
			//没有访问过的结点才进行深度遍历
			DFS(G, w);

		}
		//进入吓一跳邻边
		arc = arc->tlink;
	}
}

void DFSTraverse_L(OLGraph G){
	//初始化所有visit点
	for (int i = 0; i < G.vexnum; i++)
	{
		visited[i] = false;
	}
	for (int i = 0; i < G.vexnum; i++)
	{
		if(!visited[i])
		{
			//没有访问过结点的 进图不遍历
			DFS(G,i);
		}
	}
}

三、操作

	//用十字链表创建一个有向图P165
	int vexnum = 4;
	char *vexs = "abcd";
	int arcnum = 7;
	int maps[4][4] = {
		{ 0, 1, 1, 0 },
		{ 0, 0, 0, 0 },
		{ 1, 0, 0, 1 },
		{ 1, 1, 1, 0 },
	};
	OLGraph G;
	CreateDG(G,vexnum,vexs,arcnum,maps);
	//PrintfGraphDg(G);
	DFSTraverse_L(G);

输出:

acdb请按任意键继续. . .

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