JavaScript数据结构-17.图结构
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图的实现</title>
</head>
<body>
<script type="text/javascript"> 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.toString = toString;
this.showGraph = showGraph; //记录已经访问过的顶点
this.marked = [];
for(var i = 0;i < this.vertices;i++){
this.marked[i] = false;
}
this.dfs = dfs;
this.bfs = bfs;
}
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++){
for(var j = 0;j < this.vertices;j++){
if(this.adj[i][j] != undefined){
console.log(i+"->"+this.adj[i][j])
}
}
}
}
//深度优先搜索
function dfs(v){
this.marked[v] = true;
//输出一下
if(this.adj[v] != undefined){
console.log("已访问 :"+v);
console.log(this.marked,"adj")
}
//原书写法 这里用for in 得到的只是顶点的索引,并且会把非整数索引也循环,这里有坑
/*
for (var w in this.adj[v] ){
if(!this.marked[this.adj[v][w]]){
this.dfs(this.adj[v][w]);
}
}
*/ for(var i = 0;i<this.adj[v].length;i++){
var w = this.adj[v][i];
if(!this.marked[w]){
console.log("123456")
this.dfs(w);
}
}
}
//广度优先
function bfs(s){
var queue = [];
this.marked[s] = true;
queue.push(s);
while(queue.length > 0){
var v = queue.shift();
if(v != undefined){
console.log("已访问 :"+v);
}
for(var k in this.adj[v]){
var w = this.adj[v][k];
if(!this.marked[w]){
this.marked[w] = true;
queue.push(w);
}
}
}
} var obj = new Graph(5);
obj.addEdge(0,1);
obj.addEdge(0,2);
obj.addEdge(1,3);
obj.addEdge(2,4);
obj.showGraph();
//深度优先搜索
// obj.dfs(0);
console.log("------------")
obj.bfs(0); //由于标记数组定义在对象里 所以在这儿不能同时调用深度优先和广度优先。。
</script>
</body>
</html>
JavaScript数据结构-17.图结构的更多相关文章
- JavaScript数据结构-18.图结构广度优先和最短路径
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 为什么我要放弃javaScript数据结构与算法(第九章)—— 图
本章中,将学习另外一种非线性数据结构--图.这是学习的最后一种数据结构,后面将学习排序和搜索算法. 第九章 图 图的相关术语 图是网络结构的抽象模型.图是一组由边连接的节点(或顶点).学习图是重要的, ...
- JavaScript数据结构——图的实现
在计算机科学中,图是一种网络结构的抽象模型,它是一组由边连接的顶点组成.一个图G = (V, E)由以下元素组成: V:一组顶点 E:一组边,连接V中的顶点 下图表示了一个图的结构: 在介绍如何用Ja ...
- JavaScript实现图结构
JavaScript实现图结构 一.图论 1.1.图的简介 什么是图? 图结构是一种与树结构有些相似的数据结构: 图论是数学的一个分支,并且,在数学中,树是图的一种: 图论以图为研究对象,研究顶点和边 ...
- 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)
开门见山,本篇博客就介绍图相关的东西.图其实就是树结构的升级版.上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用.本篇博客我们就讲图的存储结 ...
- javascript数据结构与算法---栈
javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...
- 学习javascript数据结构(四)——树
前言 总括: 本文讲解了数据结构中的[树]的概念,尽可能通俗易懂的解释树这种数据结构的概念,使用javascript实现了树,如有纰漏,欢迎批评指正. 原文博客地址:学习javascript数据结构( ...
- 前端开发周报: CSS 布局方式方式与JavaScript数据结构和算法
前端开发周报:CSS 布局方式与JavaScript动画库 1.常见 CSS 布局方式详见: 一些常见的 CSS 布局方式梳理,涉及 Flex 布局.Grid 布局.圣杯布局.双飞翼布局等.http: ...
- 为什么我要放弃javaScript数据结构与算法(第十一章)—— 算法模式
本章将会学习递归.动态规划和贪心算法. 第十一章 算法模式 递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.递归通常涉及函数调用自身. 递归函数是像下面能够直接调用自身的 ...
随机推荐
- 企业搜索引擎开发之连接器connector(二十七)
ChangeQueue类实现ChangeSource接口,声明了拉取下一条Change对象的方法 * A source of {@link Change} objects. * * @since 2. ...
- 2、Docker和虚拟机的对比
2.1 虚拟化技术 虚拟机Virtual Machine与容器化技术(代表Docker)都是虚拟化技术,两者的区别在于虚拟化的程度不同. Docker为代表的容器化技术并不是虚拟机. 虚拟 ...
- Using Load-Balancers with Oracle E-Business Suite Release 12 (Doc ID 380489.1)
Using Load-Balancers with Oracle E-Business Suite Release 12 (Doc ID 380489.1) Modified: 12-Jun-20 ...
- mysql快速插入大数据
说的是插入数据,这个倒像是载入数据. 上一篇,是按照插入数据来写的,就是insert into,当时插入一万条实在是太慢了,大概是286734毫秒. insert into table values, ...
- Http 安全检测
httpsecurityreport.com www.ssllabs.com
- 【cocos2d-x 手游研发小技巧(5)获取网络图片缓存并展示】
今天是年前最后一天上班了,最后一天上班,祝大家马上有各种东西,最后一天也给写一点干货,就是获取网络图片: 经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是cocos2dx - ...
- Nginx+keepalive 负载均衡
1 规划和准备 两台相同配置的web 用途 IP MASTER 192.168.1.100 BACKUP 192.1681.101 2 安装 两台接入服务器分别安装NginX和keepalived: ...
- “全栈2019”Java第八十五章:实现接口中的嵌套接口
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 【文文殿下】对后缀自动机(SAM)的理解
后缀自动机,是一种数据结构,是由状态和转移关系构成的.它虽然叫做后缀自动机,可是他却与后缀并没有什么太大的联系. 后缀自动机的每一种状态都是原串的一些子串的集合,每个子串只唯一存在于某个状态中,对每一 ...
- 删除标注关联仿dda命令DIMDISASSOCIATE
static void sk_ARXTestXDatamydimassoc(void) { // Add your code for command sk_ARXTestXData.mydimasso ...