/*图的遍历——深度优先遍历——邻接表*/
#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 100 /*最大顶点数*/
typedef char VertexType; /*顶点*/
typedef int EdgeType; /*边上的权值*/
typedef int Boolean; /*Boolean是布尔类型,其值为TURE和FALSE*/
Boolean visited[MAXVEX]; /*访问标志的数组*/
typedef struct EdgeNode /*边表结点*/
{
int adjvex; /*邻接点域,存储该顶点对应的下标*/
EdgeType weight; /*用于存储权值,对于非网图可以不需要*/
struct EdgeNode * next; /*链域,指向下一个邻接点*/
}EdgeNode;
typedef struct VertexNode /*顶点表结点*/
{
VertexType data; /*顶点表结点*/
EdgeNode * firstedge; /*边表头指针*/
}VertexNode,AdjList[MAXVEX];
typedef struct
{
AdjList adjList;
int numVertexes,numEdge; /*图中当前顶点数和边数*/
}GraphAdjList;
/*邻接表的深度优先递归算法*/
void DFS(GraphAdjList * GL,int i)
{
EdgeNode * P;
visited[i]=true;
printf("%c",GL->adjList[i].data); /*打印顶点,也可以是其他操作*/
P=GL->adjList[i].firstedge;
while(P)
{
if(!visited[P->adjvex])
DFS(GL,P->adjvex); /*对未访问的邻接点递归调用*/
P=P->next;
}
}
/*邻接表的深度遍历操作*/
void DFSTraverse(GraphAdjList * GL)
{
int i;
for(i=0;i<GL->numVertexes;i++)
visited[i]=false; /*初始化所有的顶点状态都是未访问过状态*/
for(i=0;i<GL->numVertexes;i++)
if(!visited[i]) /*对未访问过的顶点调用DFS,若是连通图,则只执行一次*/
DFS(GL,i);
}
int main()
{
return 0;
}
图的遍历——深度优先遍历——邻接表
原文作者:数据结构之图
原文地址: https://blog.csdn.net/cckevincyh/article/details/45955713
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/cckevincyh/article/details/45955713
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。