for循环语句java图形

在我第一次接受全栈软件工程职位的现场采访时,我被要求编写一个函数,该函数可以检测有向图中是否存在循环。

读者:我没有成功编写该函数。

坦白说,我有一个什么样的图形,甚至朦胧的,在最佳的想法。 在我一生的大部分时间里,我都以为这张图是这样的:

资料来源: http : //bit.ly/2HFsh9w

原来,图实际上是这样的:

资料来源: http : //bit.ly/1OCkA1r

我知道,我认为第一个看起来也更有趣。 但是图实际上是一个非常酷的数据结构。 它们在计算机科学中无处不在,用于推荐引擎和Google Maps ,当然还有GraphQL 。 问题是,没有多少文章详细介绍Javascript中图的实现/技巧。 所以我决定写一个。

那图到底是什么?

关于图的最基本知识是它们由顶点组成 顶点是图的东西 :一个整数,对象,一个网站等边连接一对顶点。

图形可以是:

  1. 加权或未加权-这是指图形的边缘是否用值标记。 如果是,则对其进行加权。
  2. 有向还是无向-这是指边缘的行为像桥(无向)还是保龄球道(有向)。
  3. 循环或非循环-这是指图形中是否存在循环。

表示图形的主要方法有两种:使用邻接表 ,它是与每个节点相关联的数组(或对象,如果需要的话)的集合

{a: [b,c,d],b: [c,f],d: [e],e: [a,f],f: [a, c, d, e]}

或带有邻接矩阵,这是一个二维数组,其中顶点之间的边用1表示

[ [0, 1, 0, 0, 0, 0, 1, 0, 1, 0],
[1, 0, 0, 0, 1, 0, 1, 0, 0, 1],
[0, 0, 0, 0, 1, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 0, 1, 0],
[0, 1, 1, 1, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 1, 0, 0, 1, 0, 0] ]

每种表示形式都有其优缺点 。 一般而言,具有大量边的图的表现比矩阵更好,而具有较少边的图的表现比列表更好。 邻接列表往往更常见,而今天我们将使用它。

制作图表

因此,让我们开始吧! 呜。 我们要做的第一件事是…制作一张图表。

Graph构造函数内部的逻辑很简单:只是实例化为对象文字的邻接列表。 接下来的两种方法并不复杂:添加顶点的方法将每个顶点初始化为一个空数组,添加边缘的方法将一个顶点推入另一个顶点的数组。 像这样

制作一个看起来像这样的图:

或换一种说法:

RIP Microsoft画图

现在我们有了一个图! 好极了。 不仅仅是任何图:未加权的有向无环图。

遍历图

现在我们有了一个图,我们将需要找出一种访问不同顶点的方法—毕竟,我们的最终目标是检测该图是否为周期性的,这意味着沿着顶点在顶点之间遍历。图的边缘。

有两种遍历图形的方式: 广度优先遍历,先访问顶点的每个子级,然后再访问该子级中的每个子级;以及深度优先遍历,即遵循由边连接的一系列顶点,直到我们到达顶点为止在继续到原始顶点的下一个子节点之前,不能再进行任何操作。 我们在有向图中检测循环的算法将使用深度优先遍历的修改版本,因此让我们快速看一下该遍历方法的外观。

这里有两个函数:dfs函数和_dfsUtil函数。

dfs函数仅做三件事:

  1. 创建一个名为“ nodes”的数组; 每个元素都是我们图中的一个顶点
  2. 创建一个称为“ visited”的对象文字
  3. 在图形的每个顶点上调用我们的效用函数。

与二叉树(例如)相反,在执行图的深度优先遍历时,要记住的重要一点是,我们需要跟踪已经访问过的节点,而不是第二次访问它们,即使另一个顶点在该节点上有一条边。 例如,如果我们不跟踪所访问的顶点,那么从起点“ A”遍历图形将导致我们四次访问“ B”,而不仅仅是一次!

for循环语句java图形_Java图形开发人员指南,用于其中的图形和检测循环相关推荐

  1. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  2. Java 8 失宠!开发人员向 Java 11 转移...

    以下文章来源方志朋的博客,回复"666"获面试宝典 作者:白开水 来源:OSC开源社区(ID:oschina2013) 此前的 Java 社区报告曾指出,Java 8 仍是开发人员 ...

  3. aws搭建java项目_开发人员指南 - AWS SDK for Java 1.x - 适用于 Java 的 AWS 开发工具包...

    本文属于机器翻译版本.若本译文内容与英语原文存在差异,则一律以英文原文为准. 开发人员指南 - AWS SDK for Java 1.x 适用于 Java 的 AWS 开发工具包为 Amazon We ...

  4. delphi5开发人员指南_非设计人员的网页设计开发人员指南

    delphi5开发人员指南 I created my first website as a school project when I was 14. The task was simple: cre ...

  5. nvidia linux路径,NVIDIA Jetson Linux驱动程序包开发人员指南 - 快速入门指南

    这里的信息旨在帮助您开始使用NVIDIA很快上手®Jetson™驱动程序支持包(L4T与Jetson开发包一起).(名称L4T源自" Linux for Tegra"的描述,Teg ...

  6. delphi5开发人员指南_成为企业家并发挥作用的开发人员指南

    delphi5开发人员指南 by Isabel Nyo 通过伊莎贝尔·尼奥 成为企业家并发挥作用的开发人员指南 (A developer's guide to becoming an intrapre ...

  7. Apex开发人员指南

    Apex开发人员指南 调用顶点 匿名块 : 匿名块是Apex代码 , 他不会存储在元数据中 , 但是可以编译 触发器 : 可以使用触发器来调用Apex . Apex触发器使您呢不挂钩在更改Salesf ...

  8. GeoWave0.9.8开发人员指南

    GeoWave0.9.8开发人员指南 官方英文地址:http://s3.amazonaws.com/geowave/0.9.8/docs/devguide.html 介绍 什么是GeoWave Geo ...

  9. 亚马逊 新版卖家中心 销售伙伴API(amazon selling partner API)开发人员指南

    文章目录 关于本指南 术语 什么是销售合作伙伴 API? 主要特点 全球应用 销售合作伙伴 API 端点 市场 ID 值 注册为开发者 检查您注册为开发人员的请求的状态 创建和配置 IAM 策略和实体 ...

最新文章

  1. Koa 本地搭建 HTTPS 环境
  2. 《无线网络安全攻防实战》读书笔记
  3. 解决ssh登录linux速度慢的问题(以centos7为例)
  4. python脚本实例手机端-终于晓得python入门脚本实例
  5. 对话王晶:音频人才亟待培养,高水平研究人员尤其欠缺
  6. AI:***一文读懂ML,DB/NLP/算法全有了……
  7. java 读取 tgz_java – 从Spark中的压缩中读取整个文本文件
  8. 在oracle中 生成大规模数据 500万条 (使用导入数据方式 sqlldr 导入命令 *.ctl文件)
  9. python中的赋值运算符_整理Python中的赋值运算符
  10. html5音频插件js,jquery音乐播放器插件jsRapAudio
  11. 项目管理常用文档表格模板二
  12. 单片机led灯闪烁实验总结_项目二 LED灯闪烁设计实现
  13. php批量下载图片并打包
  14. 仿网易LOFTER视差滚动列表
  15. [系统控件重绘教程(一)]重绘NSWindow
  16. 用 Python selenium爬取股票新闻并存入mysql数据库中带翻页功能demo可下载
  17. paper weekly_Java Weekly 24/15:JCache,Hibernate OGM,微服务
  18. arduino电风扇程序_Arduino实验项目:温控电风扇
  19. Excel VBA 002 录制宏
  20. EditText实现图文混排,保存与解析(墨雪亲测)

热门文章

  1. 5G工业智能网关的优势
  2. Python与Ansys apdl有限元系列三:单层单跨梁单元受竖向均布力,水平集中力
  3. 将python数据保存到excel文档
  4. 浙江湖州市工程师职称评审条件和流程
  5. 编译原理之词法与语法(2)
  6. VS2015将于7月20日发布,所支持的C++特性已经完成
  7. 算法 | 如何通过Math.random()方法实现X平方或更多次方的概率?
  8. mysql 闰年_Oracle 闰年判断
  9. css3满天金光飞舞效果,CSS3金光四射的钥匙
  10. c语言用CRC校验FCS序列,FCS校验 C语言简单实现(示例代码)