图:是由边和定点的集合组成;  按照图的定点对是否有序可以分为:有向图和无向图;

 路径:所有顶点都由边连接构成;路径长度为第一个定点到最后一个顶点之间的数量;

 环:指向自身的顶点,长度为0;:至少有一条边的路径,且第一个顶点和最后一个顶点相同;

强连通:如果两个顶点之间有路径,则这两个顶点就是强连通,反之;

构建简单有向图:

利用邻接表数组表示:构建二维数组,第一个存储顶点标号,第二个存储与这个顶点相连的顶点标号;

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() {var str = "";for(var i = 0; i < this.vertices; ++i) {str = i + "-->";for(var j = 0; j < this.vertices; ++j) {if(this.adj[i][j] != undefined) {str += this.adj[i][j] + " ";}}console.log(str);}
}

 操作:demo: 

 搜索图:确定从一个指定顶点可以到达其他哪些顶点;注意:在更换顶点之后,图的树结构也要变化;

  • 深度优先搜索:从一条路径开始知道最后一个顶点,然后回溯继续下一条路径,反复直到没有路径;

    • 查找与当前顶点相邻未访问的顶点,将其值输出,并在标记数组中将相应标号标记为true;
    • 依次重复;

function init() {for(var i = 0; i < this.vertices; ++i) {this.adj[i] = [];  this.marked[i] = false;}
}
function dfs(v) {this.marked[v] = true;var adj = this.adj[v],nextAdj;if(adj != undefined) {console.log("Visited vertex: " + v);}for(var w in adj) {var nextAdj = this.adj[v][w];if(!this.marked[nextAdj]) {this.dfs(nextAdj);}}
}

操作:demo:

  • 广度优先搜索:首先检查最靠近第一个顶点的层,然后逐层搜索;

    • 查找与当前顶点相邻未访问的顶点;将其添加到已访问列表;
    • 这一层访问之后从图中取出下一个顶点,添加到以访问列表;
    • 继续;

//在 Graph 中添加this.edgeTo = [];来记录哪个顶点访问到它,所以第一个会是undefined;function dfs(s) {var queue = [],adj = this.adj[s],nextAdj;this.marked[s] = true;queue.push(s);while(queue.length > 0) {var v = queue.shift();if(v != undefined) {console.log("Visited vertex: " + v);}adj = this.adj[v];for(var w in adj) {var nextAdj = this.adj[v][w];if(!this.marked[nextAdj]) {this.edgeTo[nextAdj] = v;this.marked[nextAdj] = true;queue.push(nextAdj);}}}
}

操作:demo:

 查找最短路径:

广度优先搜索对应的最短路径:

function pathTo(s,v) { //from s to v;this.dfs(s);    if(!this.hasPathTo(v)) {return undefined;}var path = [];for(var i = v;i != s; i = this.edgeTo[i]) {path.push(i);}path.push(s);this.printPath(path);
}
function hasPathTo(v) {return this.marked[v];
}
function printPath(paths) {var str = "";while(paths.length > 0) {if(paths.length > 1) {str += paths.pop() + "-";} else {str += paths.pop();}}console.log(str);
}

 操作:demo:

 拓扑排序:

优先级约束调度:在进行完1的时候才能开始2,之后可以同时开始3,4,以此类推;

转载于:https://www.cnblogs.com/jinkspeng/p/4033511.html

js:数据结构笔记10--图和图算法相关推荐

  1. js数据结构与算法 图的BFS和DFS

    本文为技术学习的笔记-<Learning JavaScript Data Structures and Algorithms, Third Edition> 1.图的相关术语 图是网络结构 ...

  2. 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构

    本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...

  3. Auto.js学习笔记10:实例化自定义对象,在子线程使用JSON.stringify()方法导致报错(已解决)

    申明本人使用的autojs是4.1.1版本 JSON.stringify()使用导致autojs软件直接奔溃退出. 报错核心局部代码 var sendInfoObj = { //对象areaCode ...

  4. 数据结构笔记9: 图

    图的基本概念 图的定义 G=(V,E) 用线(边)连接起来的顶点(节点)的集合 V:顶点的有限集合 E:边的有限集合 基本概念 无向边 有向边 关联至:被指向 关联于:指向 无向图:所有边都是无向边的 ...

  5. 学习数据结构笔记(14) --- [图]

    B站学习传送门–>尚硅谷Java数据结构与java算法(Java数据结构与算法) 文章目录 1.图的概述 (1)无向图 (2)有向图 (3)带权图 (4) 图的表示方式 2. 用代码实现无向带权 ...

  6. 廖雪峰js教程笔记10 浏览器对象

    JavaScript可以获取浏览器提供的很多对象,并进行操作. window window对象不但充当全局作用域,而且表示浏览器窗口. window对象有innerWidth和innerHeight属 ...

  7. 数据结构 笔记:图的遍历(BFS)

    时间复杂度的对比分析   MatrixGraph ListGraph addVertex - O(n) removeVertex - O(n^2) getVertex O(1) O(n) setVer ...

  8. 数据结构 笔记:图的遍历(DFS)

    深度优先(DFS) 深度优先算法 -原料:class LinkStack<T>; -步骤: -将起始顶点压入栈中 -弹出栈顶顶点v,判断是否已经标记(标记:转2,为标记:转3) -标记顶点 ...

  9. js实现数据结构及算法之图和图算法(Graphs)

    图(Graphs) 图由边的集合及顶点的集合组成,每个城市就是一个顶点,每一条道路就是一个边 顶点也有权重,也称为成本.如果一个图的顶点对是有序的,则称之为有向图.在对有向图中的顶点排序后,便可以在两 ...

  10. 鸿钧老祖 数据结构笔记01:编程面试过程中常见的10大算法(java)

    以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: ...

最新文章

  1. 大数据学习01——配置虚拟机节点相关网络
  2. Zookeeper源码分析:Follower角色初始化
  3. P3项目轶事之一票否决的新员工培训
  4. STM32F103固件库编程:关于core_cm3.c的错误
  5. 小米oj 有多少个公差为2的等差数列
  6. zip解压mysql安装图解_Mysql安装教程-zip格式压缩包
  7. 计算机网络笔记----应用层
  8. 大大刷新记录!Swin Transformer v2.0 来了,30亿参数!
  9. java eden区_(转)可能是把Java内存区域讲的最清楚的一篇文章
  10. css 垂直居中_CSS垂直居中的另类实现
  11. 从0到1打造推荐系统-架构篇
  12. 除了下拉框/下拉联想词优化推广,还可以做那些网络推广?
  13. 山东建筑大学校内购物网(SdaiBuy.com )V1.2 Beta
  14. requests第三方库在测试中的使用
  15. 「洛谷3469」「POI2008」BLO-Blockade【Tarjan求割点】
  16. 课题申报书范文_课题优秀申报书 课题申报书范例
  17. 千万级 PV是什么意思?
  18. VB编程:取整函数Int、CInt、Fix区别-30
  19. obs 推流编码在哪设置_OBS Studio基本设置
  20. ESP8266-WIFI模块使用AT指令连接外网服务器

热门文章

  1. python通用权限管理框架图_PyCasbin: 支持 ACL、RBAC、ABAC 多种模型的 Python 权限管理框架...
  2. python圆周率计算_python圆周率计算(带进度条)
  3. 【web前端】a只显示visited属性问题解决方法
  4. 翻译: 4.2. 从零开始实现多层感知器MLP pytorch
  5. 2021-09-09316. 去除重复字母 栈
  6. 局部敏感哈希(Locality Sensitive Hashing,LSH)
  7. DST(对话状态追踪)常用方法
  8. 301.删除无效的括号
  9. 实验板FPGA型号在哪里看_【VE】一文看懂乙烯基树脂发展史!
  10. 凸优化有关的数值线性代数知识 1矩阵结构与算法复杂性