【数据结构】图的创建(邻接矩阵,邻接表)以及深度广度遍历(BFS,DFS) |
您所在的位置:网站首页 › 使用邻接矩阵创建无向图 › 【数据结构】图的创建(邻接矩阵,邻接表)以及深度广度遍历(BFS,DFS) |
文章目录
前言1.图的存储结构1.邻接矩阵2.邻接表
一、邻接矩阵二、邻接表二、图的遍历1.DFS2.BFS
前言
图是由顶点集合及顶点间的关系组成的一种数据结构:G = (V, E),其中: 顶点集合V = {x|x属于某个数据对象集}是有穷非空集合; E = {(x,y)|x,y属于V}或者E = {|x,y属于V && Path(x, y)}是顶点间关系的有穷集合,也叫 做边的集合。 完全图:在有n个顶点的无向图中,若有n * (n-1)/2条边,即任意两个顶点之间有且仅有一条边, 则称此图为无向完全图,比如上图G1;在n个顶点的有向图中,若有n * (n-1)条边,即任意两个 顶点之间有且仅有方向相反的边,则称此图为有向完全图 1.图的存储结构因为图中既有节点,又有边(节点与节点之间的关系),因此,在图的存储中,只需要保存:节点和 边关系即可。 节点保存比较简单,只需要一段连续空间即可,那边关系该怎么保存呢? 1.邻接矩阵因为节点与节点之间的关系就是连通与否,即为0或者1,因此邻接矩阵(二维数组)即是:先用一 个数组将定点保存,然后采用矩阵来表示节点与节点之间的关系。 主要思想就是,先建立顶点与数组下标的映射关系,我们通过这个两个顶点对应的下标,确定其在二维数组(邻接矩阵)中的位置,然后将邻接矩阵对应位置修改为权值(找顶点与下标关系之所以还要一个函数来控制而不用哈希表是因为我们要找的顶点可能不存在,如果用哈希表就会直接将这个不存在的顶点插入进去) namespace matrix { //V为顶点类型,W为边权值类型,MAX_W为权值最大值也就是无效值 //Direction用来判断是不是有向图,false为无向图 template class Graph { public: Graph(const V* a, size_t n) { _vertexs.reserve(n); for (size_t i = 0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |