基于相邻矩阵实现图的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