《数据结构与算法JavaScript描述》图和图算法(学习笔记C11)

本文深入探讨了图和图算法的基本概念,包括顶点、边、权重、有向图与无向图的区别,以及路径、环、圈等关键概念。同时介绍了图的表示方法,如邻接表和邻接矩阵,并提供了JavaScript实现代码示例。

相关概念

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();

未完待续

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值