数据结构 图的两种遍历方法
图有两种遍历方法,深度优先遍历和广度优先遍历。编写实验实现图的两种遍历运算,输出深度优先遍历与广度优先遍历之后的顶点序列。
![](https://i-blog.csdnimg.cn/blog_migrate/433b52d418caeb0915f47499a284fc80.png)
travsal.h
#include <malloc.h>
#include<stdio.h>
#define MAXV 100//最大顶点个数
#define INF 32767//定义∞
int visited[MAXV];
typedef char InfoType;
typedef struct ANode
{
int adjvex;//该边的邻接点编号
struct ANode *nextarc;//指向下一条边的指针
int weight;//该边的相关信息,如权值(这里用整型表示
}ArcNode;//边结点的类型
typedef struct Vnode
{
InfoType info;//结点的其他信息
ArcNode *firstarc;//指向第一个边结点
}VNode;//邻接表的头结点类型
typedef struct
{
VNode adjlist[MAXV];//邻接表的头结点数组
int n,e;//图中的顶点数和边数
}AdjGraph;//完整的图邻接表类型
void DFS(AdjGraph *G,int v)
{
ArcNode *p;
visited[v]=1;
printf("%d ",v);
p=G->adjlist[v].firstarc;
while(p!=NULL)
{
if(visited[p->adjvex]==0)
DFS(G,p->adjvex);
p=p->nextarc;
}
}
void BFS(AdjGraph *G,int v)
{
int w,i;
ArcNode *p;
int visited[MAXV];
int queue[MAXV],