当前位置:首页 > 日记 > 正文

javascript数据结构的图和图算法及算法

javascript数据结构的图和图算法及算法
图的定义

图(图)由顶点的有限非空集和顶点边组成。它通常表示为g(v,e),其中g表示图,v是图G中的顶点集,E是图G中的边集。

有向图
Directed edges: if we have directions from the vertices of Vi to Vj, we call this edge a directed edge and an arc (Arc). 我们用有序对表达VI称为弧尾,和Vj被称为弧头。

无序的图
无向边:如果顶点vi和Vj之间的边缘没有方向,它被称为无向边(边)是由一个无序的副代表(六世Vj)。

简单图

简单图:在一个图结构中,如果没有顶点到自己的边,且没有出现相同的边,就称为简单图。

地图

顶点

在创建一个图类创建一个顶点类保存顶点和边的第一步。作为链表相同的这类,对二叉搜索树的节点类。顶点类有两个数据成员:一个是用于确定顶点,和其他的表示一个布尔值访问过。它们的名字标签,分别来看。

复制代码代码如下所示:

函数顶点(标签){

this.label =标签;

}
我们保存数组中的所有顶点,在图类中,它们可以由数组中的位置引用。

表示边

图的实际信息保持在边缘上,因为它们描述了图的结构,两叉树的父节点只能有两个子节点,而图的结构更灵活。顶点可以有一个边或多个边连接到它。

我们将把图的边表示为邻接表或邻接表数组,它将存储顶点相邻顶点的数组。

建筑图

图类定义如下:

复制代码代码如下所示:

函数图(v){

this.vertices = V; / /顶点的最高点

this.edges = 0;

this.adj = { };

对于(var i = 0;i < this.vertices;+ +我){

这是形容词{ } };

这个。{ } }。推();

}

this.addedge = addedge;

this.tostring = toString;

}
这个类记录一个图所代表的边数,并用图的长度和顶点数记录顶点的个数。

复制代码代码如下所示:

功能addedge(){

这个。{ } }。推(w);

这是形容词;

这个边缘+ +;

}
在这里我们用for循环的数组来存储所有的相邻顶点的每个元素添加一个阵,并初始化为空字符串的所有元素。

图的遍历

DFS

深度优先遍历(depthfirstsearch),也被称为深度优先搜索,被称为DFS。

比如,在房间里找一把钥匙,无论从哪个房间可以开始,角落里的房间,床头柜,床,床,衣柜,电视柜,一个接一个找,不要让任何人死,当所有的抽屉,柜子都看了之后,找一个房间。

深度优先搜索:
深度优先搜索是访问未访问过的顶点,将其标记为访问,并递归地访问在初始顶点邻接列表中未访问的其他顶点。

为图形类添加一个数组:

复制代码代码如下所示:

this.marked = {}; / /保存访问过的顶点

对于(var i = 0;i < this.vertices;+ +我){

这一点。

}
深度优先搜索功能:

复制代码代码如下所示:

函数DFS(v){

这一点;

这里不需要if语句

如果(这个){ }!=未定义的){

打印(访问顶点V);

对于每一个(这个w中的var w){

如果(!标记为{ }){

this.dfs(W);

}

}

}

}
广度优先搜索

广度优先搜索(BFS)属于盲目搜索方法,其目的是扩大和检查系统以图形的所有节点找到结果。换句话说,它没有考虑到结果的可能位置和搜索整个地图直到彻底的结果。

广度优先搜索从第一个顶点开始,并试图尽可能接近顶点,如下图所示:
这项工作的原则是:

1。首先查找与当前顶点相邻的未访问的顶点,并将它们添加到访问顶点和队列列表中。

2。然后从图中取出下一个顶点v,并将其添加到已访问的顶点列表中。

三.最后,将所有与V相邻的非访问顶点添加到队列中。

以下是广度优先搜索函数的定义:

复制代码代码如下所示:

功能的BFS(s){

var队列{ };

this.marked =真;

Queue.push(S); / /添加到终点

当(队列长度> 0){

var = queue.shift(V); / /从第一组删除

如果(= =未定义){

打印(访问顶点V);

}

对于每一个(这个w中的var w){

如果(!标记为{ }){

这到{白} = V;

这一点;

Queue.push(W);

}

}

}

}
最短路径

当执行广度优先搜索时,会自动找到从一个顶点到另一个顶点的最短路径。

确定路径

为了找到最短路径,我们需要修改广度优先搜索算法来记录从一个顶点到另一个顶点的路径。我们需要一个数组来保存顶点的所有边以保存顶点。我们称这种阵列候选。

复制代码代码如下所示:

this.edgeto = {}; / /这一行添加到图形类

/ / BFS功能

功能的BFS(s){

var队列{ };

this.marked =真;

Queue.push(S); / /添加到终点

当(队列长度> 0){

var = queue.shift(V); / /从第一组删除

如果(= =未定义){

打印(访问顶点V);

}

对于每一个(这个w中的var w){

如果(!标记为{ }){

这到{白} = V;

这一点;

Queue.push(W);

}

}

}

}
拓扑排序算法

拓扑排序将对有向图的所有顶点进行排序,以将顶点从前顶点指向有向图的顶点。

拓扑排序算法是类似的。与拓扑不同,排序算法不输出当前的顶点,而是访问当前顶点邻接列表中的所有相邻顶点。在列表耗尽之前,当前顶点将被推入堆栈中。

拓扑排序算法分为两个函数。第一个功能是topsort(),这是用来设置排序过程和调用辅助功能topsorthelper(),然后显示有序顶点列表。

拓扑排序算法主要实现递归函数topsorthelper()。这个函数标记当前要访问的顶点,然后递归地访问当前顶点邻接表中的每个顶点,并标记这些顶点将被访问。最后,当前顶点被压缩到堆栈中。

复制代码代码如下所示:

/ / topsort()函数

功能topsort(){

var堆栈{ };

var访问= {;

对于(var i = 0;i < this.vertices;i++){

访问{ = false = false;

}

对于(var i = 0;i < this.vertices;i++){

如果(访问{ = false = false){

This.topSortHelper(我去过,堆栈);

}

}

对于(var i = 0;i < stack.length;i++){

如果(堆栈{ })!=未定义堆栈{ }!= false){

打印(这个。vertexlist { } } {我栈);

}

}

}

/ / topsorthelper()函数

功能topsorthelper(V,访问,堆栈){

访问过;

对于每一个(这个w中的var w){

如果(!访问{ { }){

This.topSortHelper(访问{W},访问,堆栈);

}

}

Stack.push(V);

}

相关文章

用js计算任意值之间的随机数的一种

用js计算任意值之间的随机数的一种

计算,方法,随机数,电脑软件,js,本文介绍了用JS计算任意数值之间的随机数的方法,供大家参考,具体实现方法如下: 首先:Math.random()是计算随机为超过0小于1的数的方法,这是大于随机数返回。 Math.random(* 10)没有返回大于或等于0的回报率低于10,但…

外部资源到JSP和CSS的相对路径分析

外部资源到JSP和CSS的相对路径分析

路径分析,电脑软件,JSP,CSS,向JSP页面添加基可以用作相对路径: 复制代码代码如下所示: 字符串路径= request.getcontextpath(); 字符串修改表情= request.getscheme(+) / /: + request.getservername()+:+ request.getserverport() 路径+ ; %> 然…

对CDR段落快速排版的详细说明

对CDR段落快速排版的详细说明

详细说明,段落,快速,电脑软件,CDR,本教程是关于如何在CDR中表达段落的技巧。适合初学者学习,专家可以自动浮动。我希望你能帮助本教程。好的,让我们看一看。 本教程喜欢CDR学习者介绍CDR段落文字快速排版技巧,教程比较简单,适合新手,高手请高手…

CorelDRAW产生了很强的质感的金属

CorelDRAW产生了很强的质感的金属

很强,质感,按钮,不锈钢,产生了,本教程介绍金属涂层的不锈钢按钮制作方法CorelDraw纹理的一个朋友很强,教程的按钮很漂亮,很有质感。推荐,喜欢的朋友可以跟着教程学习 CorelDRAW在广告的世界是非常有用的,现在是很好的学习如何制作按钮。学会跟…

PS图象处理软件让美丽的秋天红蓝效

PS图象处理软件让美丽的秋天红蓝效

图象,树林里,处理软件,秋天,效果,素材图片主色为绿色,当放入主色橙红色时,则在高光中加入少许黄色,深蓝色和紫色则可以添加多一点。 素材图片主色为绿色,当放入主色橙红色时,则在高光中加入少许黄色,深蓝色和紫色则可以添加多一点。 原 最终效…

在草地的美丽和秋辉PS图象处理软件

在草地的美丽和秋辉PS图象处理软件

图象,草地,处理软件,美丽,电脑软件,因为这张照片没有阳光,当我们需要把整个主色调变成暖色时,我们就在局部增加了黄色和高光泽,模拟了阳光的效果,增加了一点冷色,增强了层次感。 材料图片中没有阳光。当我们调整颜色时,我们需要把整个主色调变成…

jQuery中过滤方法使用的实例分析

jQuery中过滤方法使用的实例分析

过滤,实例分析,方法,电脑软件,jQuery,本文演示了过滤器方法在jQuery中的用法,供大家参考,具体分析如下: 筛选器()方法将匹配元素集减为与指定选择器相匹配的元素。 筛选器方法中的参数可以是一个字符串值,其中包含一个选择器表达式,用于匹配当前…

对buffer.buffer.bytelength方法在

对buffer.buffer.bytelength方法在

使用说明,方法,电脑软件,buffer,bytelength,方法显示: 获取字符串的字节长度。 这个函数是不同的string.prototype.length,它返回一个字符串中的字符数。 Grammar: 复制代码代码如下所示: Buffer.byteLength(编码字符串,{ }) 接收参数: 字符…

ps实际实用技能:曲线、滤镜、智能对

ps实际实用技能:曲线、滤镜、智能对

智能,曲线,对象,滤镜,字体,以下萧边为您带来PS的实践技能:曲线、过滤器、智能对象和字体。非常适合初学者学习。建议喜欢和朋友一起学习。 以下为PS带来的实际实用技能:曲线、滤镜、智能对象和字体…

PHP静态文件生成类实例

PHP静态文件生成类实例

静态文件,实例,电脑软件,PHP,本文演示了PHP静态文件生成类,供大家参考。 具体实现代码如下: 复制代码代码如下: 类createhtml { 函数mkdir($前缀= 'article) { Y元=日期(Y); 美元=日期(); 美元=日期; P = directory_separator; 路径= 'arti…

对transport.jsjQuery的矛盾的解决

对transport.jsjQuery的矛盾的解决

矛盾,电脑软件,transport,jsjQuery,问题的原因: / / transport.js js文件 object.prototype.tojsonstring =功能({ ************** }) 580行和590行之间的句子用于格式化JSON。它重构对象的结构,从而导致JS框架冲突。如果我们想解决这个问题,…

ajaxform和ajaxsubmit糊可作为示例

ajaxform和ajaxsubmit糊可作为示例

示例代码,电脑软件,ajaxform,ajaxsubmit,复制代码代码如下所示: 要改变这一模板,模板|选择工具 并在编辑器中打开模板。 / / ajaxform VaR运算= { { DataType:文本 类型:'post, 网址:处理PHP 。 beforesubmit:showrequest, 成功:showresponse, Cle…