数据结构与JS也能够成为CP(十)Graph图

Hello小伙伴们,你们好哇~~今天要给你们带来数据结构专题的最后一个:图啦~刚刚忽然发现题目一直有个错字,捶胸顿足中,居然尚未宝宝提醒我,委屈巴巴。不扯闲话啦,咱们先来看看图是什么吧~图由边和顶点的集合组成,html

名词解释算法

1)有向图:一个图的顶点对是有序的。微信

2)无序图:图是无序的。数据结构

3)简单图:没有重复边、重复顶点的圈。
this

4)强连通:两个顶点之间有路径。spa


图的实现.net

下面看看图怎么实现吧!图是由顶点和边组成的,咱们首先要实现顶点,而后实现边。code

function Graph(v) { this.vertices = v; this.edges = 0; this.adj = []; for (var i = 0; i < this.vertices; ++i) { this.adj[i] = []; this.adj[i].push(""); } this.addEdge = addEdge; this.showGraph = showGraph;}function addEdge(v, w) { this.adj[v].push(w); this.adj[w].push(v); this.edges++;}function showGraph() { for (var i = 0; i < this.vertices; ++i) { putstr(i + " -> "); for (var j = 0; j < this.vertices; ++j ) { if (this.adj[i][j] != undefined) {  putstr(this.adj[i][j] + ' '); }  } print();  }}


图的搜索orm

图的搜索包括深度优先搜索和广度优先搜索。htm

1)深度优先搜索算法比较简单:访问一个没有访问过的顶点,将它标记为已访问,再递归地去访问在初始顶点的邻接表中其余没有访问过的顶点。

function dfs(v) { this.marked[v] = true; for (var w in this.adj[v]) { if (!this.marked[w]) { this.dfs(w); }  }}

2)广度优先搜索从第一个顶点开始,尝试访问尽量靠近它的顶点。本质上,这种搜索在图上是逐层移动的,首先检查最靠近第一个顶点的层,再逐渐向下移动到离起始顶点最远的层。

function bfs(s) { var queue = []; this.marked[s] = true; queue.push(s); // 添加到队尾  while (queue.length > 0) { var v = queue.shift(); // 从队首移除 if (v == undefined) { } for (var w in this.adj[v]) { if (!this.marked[w]) { this.edgeTo[w] = v; this.marked[w] = true; queue.push(w); }  }} 


图的应用

说了这么多,图可以用在哪里呢?

1)查找最短路径

2)拓扑排序

具体的情境还等待你们本身发挥想象力哦~想到情境也能够后台留言与兔妞讨论哟~


好啦~今天的分享就到这里啦~喜欢兔妞的文章就请在看+关注吧!下面要开始什么专题呢?好纠结,不知道小伙伴们有没有建议呢?

本文分享自微信公众号 - 萌兔it(mengtu_it)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索