相关概念
1.图由边的集合及顶点的集合组成。
2.顶点也有权重,也称为成本。
3.如果一个图的顶点对是有序的,则可以称之为有向图。有向图表明了顶点的流向。
4. 如果图是无序的,则称之为无序图,或无向图。
5.图中的一系列顶点构成路径,路径中所有的顶点都由边连接。
6.路径的长度用路径中第一个顶点到最后一个顶点之间边的数量表示。
7.由指向自身的顶点组成的路径称为环,环的长度为 0。
8.圈是至少有一条边的路径,且路径的第一个顶点和最后一个顶点相同。
9.无论是有向图还是无向图,只要是没有重复边或重复顶点的圈,就是一个简单圈。
10.除了第一个和最后一个顶点以外,路径的其他顶点有重复的圈称为平凡圈。
11.如果两个顶点之间有路径,那么这两个顶点就是强连通的,如果有向图的所有的顶点都是强连通的,那么这个有向图也是强连通的。
代码
// 图
// 保存顶点和边
function Vertex(label) {
this.label = label
}
// 表示图的边的方法 1:邻接表或邻接表数组
// 表示图的边的方法 2:邻接矩阵
// 记录一个图表示了多少条边
function Graph(v) {
this.vertices = v
this.edges = 0
// 记录顶点数量
this.adj = []
// 通过for循环为数组中的每个元素添加一个子数组
// 来存储所有的相邻顶点
// 并将所有元素初始化为空字符串
for (var i = 0; i < this.vertices; ++i) {
this.adj[i] = []
this.adj[i].push('')
}
this.addEdge = addEdge
this.showGraph = showGraph
}
// 将各元素加入各列表
// 最后边数+1
function addEdge(v, w) {
this.ajd[v].push(w)
this.adj[w].push(v)
this.edges++
}
// 打印所有顶点和相邻顶点列表来显示图
function showGraph() {
for (var i = 0; i < this.vertices; ++i) {
console.log(i + '->')
for (var j = 0; j < this.vertices; ++j) {
if (this.adj[i][j] != undefined) {
console.log('元素', this.adj[i][j] + ' ')
}
}
console.log('-----')
}
}
var g = new Graph(5);
g.addEdge(0,1);
g.addEdge(0,2);
g.addEdge(1,3);
g.addEdge(2,4);
g.showGraph();
本文深入探讨了图和图算法的基本概念,包括顶点、边、权重、有向图与无向图的区别,以及路径、环、圈等关键概念。同时介绍了图的表示方法,如邻接表和邻接矩阵,并提供了JavaScript实现代码示例。

被折叠的 条评论
为什么被折叠?



