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数据结构与算法(第十一章)—— 算法模式
本章将会学习递归.动态规划和贪心算法. 第十一章 算法模式 递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.递归通常涉及函数调用自身. 递归函数是像下面能够直接调用自身的 ...
随机推荐
- Android-快速查找索引篇
01.Android-UI汇总 01.Android-TextView跑马灯效果 02.Android-Activity 01.Test 03.Android-数据存储 01.Test 04.Andr ...
- 国际时区 TimeZone ID列表
public static void main(String[] args) { Calendar c = new GregorianCalendar(); c.setTime(new Date()) ...
- Unity3d中使用Lua
对于手机游戏,如果可以在线更新以实现bug修复.新功能添加等等,其好处自不必多说. 通过C#的反射机制,也可以实现某种程度上的脚本级更新,具体可以参考 http://docs.unity3d.com/ ...
- CentOS 7安装OpenVPN
命令很简单,但是网上似乎没资料,只有RHEL6以下的资料. 直接贴命令: 1 2 3 4 5 cd ~ wget http://swupdate.openvpn.org/as/openvpn-as-2 ...
- JavaScript日期(参考资料)
构造函数1.new Date() 如果没有参数,则Date的构造器会依据系统设置的当前时间来创建一个Date对象.2.new Date(value) value代表自1970年1月1日00:00:00 ...
- WP8.1StoreApp(WP8.1RT)---本地Toast
WP7/8中的Toast是不能在前台弹出的. WP8.1StoreApp可以利用Win8中的方式: private void Toast(string title,string content) { ...
- 【C#】在datatable中添加一序号列,编号从1依次递增,并且在第一列
详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak/// <summary> ...
- pod-infrastructure:latest镜像下载失败
报错一:image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be be ...
- order by 使用注意
create table user ( id int primary key, name varchar(11) , depid int ); create table dept( id int pr ...
- 各大浏览器相继发布声明将停止支持 TLS 1.0 和 TLS 1.1 !
简评:TLS 1.0 发布至今已将近 20 周年即将寿终正寝,期间为我们保障了千亿次甚至万亿次的数据请求安全. TLS 工作组几个月前发布声明文件弃用 TLS 1.0 和 TLS 1.1. 昨天,包括 ...