图实验(邻接矩阵)

这篇博客介绍了如何利用邻接矩阵来存储图,并实现图的深度优先遍历(DFT)和广度优先遍历(BFT)。通过创建一个MGraph类,博主详细阐述了类的构造函数、DFT和BFT的方法。在测试程序中,展示了从顶点0出发的遍历序列。博客提供了具体的C++代码实现,有助于理解图的遍历算法。
摘要由CSDN通过智能技术生成

图实验(邻接矩阵)

用邻接矩阵实现图的存储,并完成图的深度优先遍历和广度优先遍历

头文件

#pragma once
const int MS = 10;//图中最多顶点数
class MGraph
{
public:
	MGraph(char a[], int n, int e);
	~MGraph() {};
	void DFT(int v);//深度优先遍历
	void BFT(int v);//广度优先遍历
	int visited[MS];//判断顶点是否被访问过
private:
	char vertex[MS];//存放顶点得数组
	int edge[MS][MS];//存放边的数组
	int vexNum, edgeNum;//顶点和边的数量
};

源文件

#include "MGraph.h"
#include<iostream>
MGraph::MGraph(char a[], int n, int e) {
	vexNum = n; edgeNum = e;
	//存储顶点
	for (int i = 0; i < vexNum; i++) {
		vertex[i] = a[i];
		visited[i] = 0;
	}
	//初始化邻接矩阵
	for (int i = 0; i < vexNum; i++) {
		for (int j = 0; j < vexNum; j++) {
			edge[i][j] = 0;
		}
	}
	//依次输入每一条边,建立无向图
	for (int i = 0; i < edgeNum; i++) {
		int j, k;
		std::cout << "请输入各边的信息";
		std::cin >> j >> k;
		edge[j][k] = 1;
		edge[k][j] = 1;

	}

}

void MGraph::DFT(int v) {
	std::cout << vertex[v];
	visited[v] = 1;
	for (int j = 0; j < vexNum; j++) {
		if (edge[v][j] == 1 && visited[j] == 0) {
			DFT(j);
		}
	}
}

void MGraph::BFT(int v) {
	int Q[MS];
	int front = -1, rear = -1;
	std::cout << vertex[v];
	visited[v] = 1;
	rear++;
	Q[rear] = v;//被访问的顶点入队
	while (front != rear) {//当队列非空
		++front;
		v = Q[front];//被访问过的出队
		for (int j = 0; j < vexNum; j++) {
			if (edge[j][v] == 1 && visited[j] == 0) {
				std::cout << vertex[j];
				visited[j] = 1;
				rear++;
				Q[rear] = j;
			}
		}
	}
}

测试程序

#include<iostream>
using namespace std;
#include"MGraph.h"

int main() {
	char ch[] = { 'A','B','C','D','E' };
	MGraph MG(ch, 5, 6);
	cout << "\n深度优先遍历序列是:";
	MG.DFT(0);//从0出发
	for (int i = 0; i < MS; i++) {
		MG.visited[i] = 0;
	}
	cout << "\n广度优先遍历序列是:";
	MG.BFT(0);//从0出发
}

测试图示

在这里插入图片描述

测试结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值