图的分类
有/无向图
如果给图的每条边规定一个方向,那么得到的图称为有向图。在有向图中,与一个节点相关联的边有出边和入边之分。相反,边没有方向的图称为无向图。
下面介绍图的两种存储结构
1、邻接矩阵
用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。邻接矩阵又分为有向图邻接矩阵和无向图邻接矩阵
邻接矩阵的思想图
代码实现
int GetIndex(const V& v)//获取顶点
{
for (size_t i=0;i<_size;i++)
{
if(_vertex[i]==v)
return i;
}
throw std::invalid_argument("顶点赋值错误");
}
void AddEdge(const V& src,const V& dst,const W& w)//增加矩阵中的点
{
size_t srcIndex=GetIndex(src);
size_t dstIndex=GetIndex(dst);
_matrix[srcIndex][dstIndex]=w;
if(_isDirection==false)
_matrix[dstIndex][srcIndex]=w;
}
2、邻接表
图的邻接矩阵存储方法跟树的孩子链表示法相类似,是一种顺序分配和链式分配相结合的存储结构。如这个表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。