<!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.图结构的更多相关文章

  1. JavaScript数据结构-18.图结构广度优先和最短路径

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 为什么我要放弃javaScript数据结构与算法(第九章)—— 图

    本章中,将学习另外一种非线性数据结构--图.这是学习的最后一种数据结构,后面将学习排序和搜索算法. 第九章 图 图的相关术语 图是网络结构的抽象模型.图是一组由边连接的节点(或顶点).学习图是重要的, ...

  3. JavaScript数据结构——图的实现

    在计算机科学中,图是一种网络结构的抽象模型,它是一组由边连接的顶点组成.一个图G = (V, E)由以下元素组成: V:一组顶点 E:一组边,连接V中的顶点 下图表示了一个图的结构: 在介绍如何用Ja ...

  4. JavaScript实现图结构

    JavaScript实现图结构 一.图论 1.1.图的简介 什么是图? 图结构是一种与树结构有些相似的数据结构: 图论是数学的一个分支,并且,在数学中,树是图的一种: 图论以图为研究对象,研究顶点和边 ...

  5. 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)

    开门见山,本篇博客就介绍图相关的东西.图其实就是树结构的升级版.上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用.本篇博客我们就讲图的存储结 ...

  6. javascript数据结构与算法---栈

    javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...

  7. 学习javascript数据结构(四)——树

    前言 总括: 本文讲解了数据结构中的[树]的概念,尽可能通俗易懂的解释树这种数据结构的概念,使用javascript实现了树,如有纰漏,欢迎批评指正. 原文博客地址:学习javascript数据结构( ...

  8. 前端开发周报: CSS 布局方式方式与JavaScript数据结构和算法

    前端开发周报:CSS 布局方式与JavaScript动画库 1.常见 CSS 布局方式详见: 一些常见的 CSS 布局方式梳理,涉及 Flex 布局.Grid 布局.圣杯布局.双飞翼布局等.http: ...

  9. 为什么我要放弃javaScript数据结构与算法(第十一章)—— 算法模式

    本章将会学习递归.动态规划和贪心算法. 第十一章 算法模式 递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.递归通常涉及函数调用自身. 递归函数是像下面能够直接调用自身的 ...

随机推荐

  1. phonegap/cordova学习建议

    在技术群里面,一直有一些新人进来,问了一些让人可笑不得的问题.国内的资料相对比较少,而且很旧,都是一些2.X版本的资料.因此想写一些东西,帮助一下新人,让他们少走弯路. 首先说一些很多人问的问题,个人 ...

  2. java和json互转

    在网页中想后台传递多个数据时,有时数据还是多个动态列表,数据很复杂时,JavaScript程序员喜欢把他们作为json串进行处理,后台收到后需要对json字符串进行解析,幸好有JSON-lib,这个J ...

  3. Mac和 iOS 下的对称和非对称加密算法的使用

    分享在Mac 和 iOS 上使用到的对称和非对称加密算法. 包括RSA,DSA, AES, DES, 3DES 和 blowfish 等等.因为要实现ssh协议, 所以用到了这些算法, 这些算法在ma ...

  4. Kindeditor编辑器上传附件,自动获取文件名显示。

    大部分在线编辑器在上传附件之后都是会以路径的形式显示出来很不友好.类似这样..怎么样显示成这样用户上传的原始文件名呢.就是这样.是不是看着很友好. kindeditor编辑器上传文件是已插件的形式调用 ...

  5. Docker 搭建 etcd 集群配置

    #关闭selinux.防火墙 systemctl stop firewalld.service systemctl disable firewalld.service firewall-cmd --s ...

  6. Python3.5 学习五

    心灵鸡汤电影推荐: 阿甘正传.辛德勒名单.肖申克的救赎.勇敢的心.角斗士.美国丽人.教父.钢琴师.指环王.西雅图不眠夜.廊桥遗梦.可可西里的美丽传说.放牛班的春天.血钻.战争之王.上帝之城.中央车站. ...

  7. JAVA中-面向网络编程---单层交互

    面向网络编程---单层交互: 客户端说明: /* * 实现TCP客户端,链接到服务器 * 和服务器实现数据交互 * 实现TCP客户端的类 java.net.Scoket * 构造方法: * Socke ...

  8. jquery中选择器的 html() text() val() attr() 方法的区别与使用方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 在myeclipse中有的项目上有个红色感叹号

    之前做项目的时候遇到过这个问题,最后确定原因是项目引用了很多放在D盘或E盘上的jar包,但是我们不小心把这些jar包删除或移动路径了,因此myeclipse识别不了出现红色的感叹号,解决方式是在mye ...

  10. jquery 通过attr获取属性只有一个值的解决

    var a = []; $($('select.list[data-target="' + target + '"]').find("option:selected&qu ...