图的邻接矩阵以及深度优先遍历 + 广度优先遍历

本文介绍了图的邻接矩阵表示法,通过一个简单的实例展示了如何使用邻接矩阵实现图,并详细阐述了深度优先遍历和广度优先遍历的顺序,提供了相关代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图的邻接矩阵表示法非常简单,一个定点数组,一个二维数组搞定,类似与这样
这里写图片描述
下面简单实现一个邻接矩阵表示的方法的图,以及遍历的两种方式。

Graph.h
#pragma once

#define MAX_SIZE 30
template<class T,class E>
class Graph
{
public:
    Graph(size_t size);
    virtual ~Graph();
    bool isEmpty()const {
        return verticleSize == 0;
    }
    int numberofVerticles(){
        return verticleSize ;
    }



protected:
    int maxVerticles=MAX_SIZE;
    int verticleSize;

    virtual T getValue(int i) = 0;                //获取值
    virtual E getWeight(int v1, int v2) = 0;      //根据两个定点获取边的权值
    virtual int getFirstNeighbor(int v) = 0;      //取顶点v的第一个邻接顶点  
    virtual int getNextNeighbor(int v, int w) = 0; //取邻接顶点w的下一个邻接顶点  
    virtual int getVertexPos(T vertex) = 0;      //由定点获取下标
    virtual T* getVerticles() = 0;              //获取定点数量

};

template<class T, class E>
 Graph<T, E>::Graph(size_t size):verticleSize(size)
{

}

 template<class T, class E>
 inline Graph<T, E>::~Graph()
 {
 }

父类只是定义了一些基本方法,不再赘述。

遍历方式

这里写图片描述
我们按照深度遍历的顺序,假设从v1开始,那么数序是v1->v0->v4->v2->v3
这里写图片描述
同样从v1开始,顺序是v1->v0->v2->v4->v3

GraphMatrix.h
#pragma once
#include "Graph.h"
#include <iostream>
#include <stack>
#include <queue>

#define INF 0xffffff

using namespace std;

template<class T, class E>
class GraphMatrix :public Graph<T, E>
{
public:
    GraphMatrix(size_t size);
    ~GraphMatrix();
    static const int MAX_WEIGHT = INF;

    T getValue(int
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值