图
图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图中G中的顶点的集合;
E(G)表示图G中顶点之间的关系集合。(|V|表示图中顶点个数,|E|表示图中边的条数)
无向图,有向图:顾名思义就是有无方向,无向图只有度,有向图的度分为入度和出度。
简单图:没有重复的边,复杂图:有重复的边,可能存在节点到自身的边。
完全图:
无向完全图:任意两个顶点之间都存在边,n个顶点有n(n-1)/2条边
有向完全图:任意两个顶点之间都存在方向相反的弧,n个顶点有n(n-1)条边
连通:若从顶点v到顶点w有路径存在,则称v和w是连通,强连通则是v到w,w到v都有路径存在,则v和w是强连通。
邻接矩阵:结点数为n的图G=(V,E)的邻接矩阵A是n*n的,将G的顶点编号为v1,v2,…,vn(数组下标),若<vi, vj>属于E,则A[i][j]=1,否则为0。如果边有权重w,则A[i][j]=w
邻接表:为每一个顶点建立一个单链表存放与它相邻的边。
DFS:(一般用栈(后进先出的特性)和数组(用于标记)来存储)
过程:随机选择一个点作为起始顶点(如果没有的话)a,访问a的各个邻接顶点,再访问邻接顶点的邻接顶点,若出现这一顶点的邻接顶点都被访问过,就退回上一层,直到全部被访问过。
BFS:(一般用队列(先进先出)和数组(用于标记)来存储)
过程:随机选择一个点作为起始顶点(如果没有的话)a,访问a的各个邻接顶点,然后依次访问a的各个邻接顶点的邻接顶点(一个个来的样子),直至全部被访问过。
最小生成树(不唯一,当带权无向连通图G的各边权值不等时或G)只有结点数减1条边时,最小生成树唯一),权值是唯一的,最小的。
普里姆算法:适用于顶点较多的稠密图
克鲁斯卡尔算法:适用于边较多的稀疏图
Dijkstra(不知道拼对了吗)算法:用于求最短路径。初始化数组,将顶点集合分为v和
U-V,满足dist[j]=Min{dist[i]}时就将该顶点放入U。刷新最短路径长度。
原文:https://www.cnblogs.com/qw23/p/13127613.html