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

来源:互联网 发布:淘宝开店拍照要求 编辑:程序博客网 时间:2024/06/06 14:12

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

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


二、算法与数据结构

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);}}}

三、操作

//用十字链表创建一个有向图P165int 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请按任意键继续. . .



阅读全文
0 0
原创粉丝点击