图的遍历实现

本文介绍了如何使用深度优先搜索(DFS)和广度优先搜索(BFS)进行图的遍历。通过具体代码实现,详细解释了两种遍历算法的工作原理及其在实际问题中的应用。
摘要由CSDN通过智能技术生成

主要代码:

/*
  Name: 图的邻接矩阵存储结构 
  Copyright: BTC 2004
  Author: Zhuang Bo
  Date: 2004
  Description: 
*/

#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED

#include <stdio.h>
#include "ds.h"

///
//图的邻接矩阵表示
#define MAXQSIZE 100
#define QElemType int     //队列元素
#define MAX_VERTEX_NUM 20 //最大顶点数
#define VexType char //顶点类型
#define ArcType int
#define INFINITY INT_MAX  //无穷大 
typedef struct {
    VexType  vexs[MAX_VERTEX_NUM]; //顶点向量 
    ArcType  arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵 
    int      vexnum,arcnum;   //顶点,边个数
} MGraph;
bool visited[MAX_VERTEX_NUM];

//循环队列类型定义  
typedef struct{  
    QElemType *base;  
    int front;  
    int rear;  
}SqQueue;
///
//图的基本操作声明 

//输入顶点和弧的信息,建立图
Status CreateGraph(MGraph &G); 
//销毁图的结构
Status DestroyGraph(MGraph &G);

//取顶点
VexType GetVex(MGraph G, int v);
//更新顶点信息 
Status PutVex(MGraph &G, int v, VexType val);
//插入弧(v,w)
Status InsertArc(MGraph &G, int v, int w, ArcType arc);
//删除弧(v,w)
Status DeleteArc(MGraph &G, int v, int w);
//插入顶点v
Status InsertVex(MGraph &G, VexType val);
//删除顶点v
Status DeleteVex(MGraph &G, int v);

//图G中顶点v的第一个邻接点
int FirstAdjVex(MGraph G, int v);
//图G中顶点v在w之后的下一个邻接点
int NextAdjVex(MGraph G, int v, int w);

void DFS(MGraph G, int v);
//深度优先遍历图
void DFSTraverse(MGraph G, int v);
//广度优先遍历图 
void BFSTraverse(MGraph G, int v);

//打印邻接矩阵(调试用)
void PrintAdjMatrix(MGraph G);
int locateVex(MGraph G, VexType v);

Status InitQueue(SqQueue &Q);
Status EnQueue(SqQueue &Q,QElemType e);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值