基于相邻矩阵实现图的ADT

基于相邻矩阵实现图的ADT

相邻矩阵表示法:

 (1)也也称邻接矩阵或二维数组表示发

 (2)图的顶点元素是一个|V|的顺序表

 (3)如果从vi到vj存在一条边,则第i行的第j个元素做标记,否则不做标记

 (4)如果矩阵中的元素要存储边的权值,则矩阵中每个元素必须足够大(存储权值),或者存储一个指向权值存储位置的指针

   

相邻矩阵特点分析:

  (1)可以用于存储无向图或者有向图

  (2)相邻矩阵需要存储所有可能的边,不管这条边是否实际存在

  (3)没有结构性开销,但是存在空间浪费

  (4)相邻矩阵的空间代价只与顶点的个数有关,为O(|V|^2),图越密集,其空间效率就越高

  (5)基于相邻矩阵的图算法,必须查看它的所有可能的边,导致总的时间代价为O(|V|^2),所以相邻矩阵适合密集图的存储

图的ADT:

图的基本操作:

  (1)结构操作/销毁型操作

  (2)引用型操作:

      获取图顶点或边,查找

  (3)加工型操作:

      插入,删除图顶点或边

图ADT代码:Graph.hpp

 

 1 #ifndef _GRAPH_HPP_
 2 #define _GRAPH_HPP_
 3 #define VertexType int 
 4 class Graph{
 5     public:
 6         virtual int n()=0;
 7         virtual int e()=0;
 8         virtual int first(int )=0;
 9         virtual int next(int,int)=0;
10         virtual void putVex(int v,VertexType value)=0;
11         virtual int locateVex(VertexType u)=0;
12         virtual VertexType getVex(int v)=0;
13         virtual void setEdge(int v1,int v2,int value)=0;
14         virtual void deleteEdge(int,int)=0;
15         virtual void setMark(int v,int value)=0;
16         virtual int getMark(int v)=0;
17         virtual int getEdge(int,int )=0;
18 };
19 #endif

 

图ADT的物理实现-相邻矩阵

声明:Graphm.hpp

 

 

 1 #ifndef _GRAPHM_HPP_
 2 #define _GRAPHM_HPP_
 3 #define VertexType int
 4 #define MAX_VERTEX_NUM 10000
 5 #include "Graph.hpp"
 6 cla
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值