实验4 图的基本操作

这篇博客介绍了如何使用C++编程实现图的深度优先遍历(DFS)和广度优先遍历(BFS)。通过邻接矩阵和邻接表两种数据结构,分别展示了创建图、深度优先搜索和广度优先搜索的函数实现,并提供了实际的测试案例。此外,还讨论了程序的调试和源代码分析。
摘要由CSDN通过智能技术生成

一、题目

编制一个演示用邻接矩阵和邻接表存储结构实现的图的深度优先遍历和广度优先遍历算法的程序。另附扩展实现(1:有向图2:无向图3:有向网4:无向网) 4种类型的图的(1.邻接矩阵,2.邻接表,3.深度优先搜索,4.广度优先搜索,5.最小生成树,6.拓扑排序,7.关键路径,8.从某个源点到其余各顶点的最短路径,9.每一对顶点之间的最短路径)图的9种实现程序。(附源代码于尾页//程序1 //程序2 /*扩展实现源代码*/)

二、需求分析      

本程序在Windows环境下用用Visual C++编写,完成程序1和程序2的实现:

程序1

void CreatMatrix(adjmatrix GA)       // 建立图的邻接矩阵

void DfsMatrix(adjmatrix GA,int v)  // 从初始点v出发深度优先遍历邻接矩阵GA表示的图

void BfsMatrix(adjmatrix GA,int v)  // 从初始点v出发广度优先遍历邻接矩阵GA表示的图

程序2

void CreatAdjlist(AdjList GL) //建立图的邻接表

void DfsAdjlist(AdjList GL,int v) //从初始点v出发深度优先遍历邻接表GL表示的图

void BfsAdjlist(AdjList GL,int v) //从初始点v出发广度优先遍历邻接表GL表示的图

 

三、概要设计

程序1

/* 定义邻接矩阵类型 */

typedef int adjmatrix[n+1][n+1];

程序2

/* 邻接表的结点类型 */

typedef struct arc

{

int adjvex;

    struct arc *next;}ArcNode;

typedef struct VexNode

{

int vertex;

    ArcNode *firstarc;

}VerNode;

typedef VerNode AdjList[MAXNODE];

三、详细设计

分别对程序1和程序2进行编码设计如下:

//程序1

#include <stdio.h>

#define n 5

#define MAXSIZE 10     //广度优先遍历时所使用的队列的最大容量

#define MaxNum 10000   //定义一个最大数

// 定义邻接矩阵类型

typedef int  adjmatrix[n+1][n+1];  // 0号单元没用

int visited[n+1];                  // 0号单元没用

int arcnum;                        //边的个数

//建立图的邻接矩阵

//程序2

#include <stdio.h>

#include <malloc.h>

#define MAXNODE 10

#define NULL 0

typedef struct arc

{

     int adjvex;

    struct arc *next;

}ArcNode;

typedef struct VexNode

{

     int vertex;

 ArcNode *firstarc;

}VerNode;

typedef VerNode AdjList[MAXNODE];

int visited[MAXNODE];

int vexnum,arcnum;

// 建立图的邻接表

2)图的基本操作如下:

//程序1

//建立图的邻接矩阵

void CreatMatrix(adjmatrix GA)

//从初始点v出发深度优先搜索邻接矩阵GA表示的图

void DfsMatrix(adjmatrix GA,int v)

//从初始点v出发广度优先搜索邻接矩阵GA表示的图

void BfsMatrix(adjmatrix GA,int v)

//程序2

// 建立图的邻接表

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值