图的概念:
图是网络结构的抽象模型,是一组由边连接的节点(或节点)。学习图很重要,任何二元关系都可以用图来表示,比如可以用图来表示道路,航班,以及通信状态等。一个图G=(V,E)由以下元素来表示,V是一组顶点;E是一组边,连接V中的顶点。
图的相关术语:
- 相邻顶点:由一条边连接在一起的顶点
- 节点的度:一个节点的相邻顶点的数量
- 路径:一个顶点v1,v2,v3.. vk的一个连续序列,其中vi和v(i+1)是相邻的
- 简单路径:路径中不包含重复的顶点的路径
图的表示:
图的表示有两种方式:
- 邻接矩阵:一个二维数组来表示顶点之间的连接,两顶点之间有连接则值为1,反之为0
- 邻接表:由图中每个顶点的相邻顶点列表组成
js实现图的定义及基本方法:
图也是一个类(本次考虑的主要是无向图),类中有两个变量,一个是数组,用来存放图中的所有的顶点;另一个是字典,用来存储每个顶点的邻接表。所以在定义或者使用图的一些基本方法时需要先定义字典的基本定义和基本方法。这里先展示图的结构和方法的定义,见如下代码:
//定义个无向图
function Graph() {
//创建一个数组用来存放图中的所有顶点
var vertices = [];
//创建一个字典来存储邻接表
var adjList = new Dictionary();
//向图中添加一个新的节点
this.addVertex = function (v) {
vertices.push(v);
adjList.set(v, []);//设置顶点v作为键对应的字典值为一个空数组
}
//向图中添加顶点之间的边
this.addEdge = function (v,w) {
adjList.get(v).push(w);//将w加入到v的邻接表中