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. MobaXterm使用
  2. 浅谈MVP与Model-View-ViewModel(MVVM)设计模式
  3. Robust Point Cloud Registration Framework Based on Deep Graph Matching (RGM) 简略分析
  4. CALayers详解
  5. UIImageView 响应UIButton的点击事件
  6. sql oltp_SQL Server中的内存中OLTP的快速概述
  7. c# 解析Xml文件
  8. 嵌入式系统与人工智能
  9. pr视频两边模糊_干货!Pr教程:如何在视频中添加模糊效果?
  10. qt中c语言运行中文字体乱码,QString 与中文问题/Qt界面中文字体及大小设置
  11. 排列组合之插板法实例
  12. 上传图片到淘宝 API 返回值说明
  13. kali之beef的使用
  14. Sentiment Embeddings with Applications to Sentiment Analysis
  15. 半小时教你做大转盘游戏(QT篇)
  16. python2和python3 with open as f写中文乱码
  17. 动态规划:求两个字符串的最长公共子序列
  18. 数据库--mysql(SQL语句)
  19. 只有170字节,最小的64位Hello World程序这样写成
  20. android 蓝牙扫描流程,Android 9.0 Bluetooth源码分析(二)蓝牙扫描流程

热门文章

  1. 批量插入报错:Parameter ‘id‘ not found. Available parameters are [forlonList, param1]
  2. 【工作技巧】Ubuntu备忘记录
  3. linux双引号输出输出不正确
  4. 你所不知道的蓝牙适配器的好处
  5. apk软件管理——玩转alpine linux
  6. java正则匹配英文句号_java正则表达式最简单 学习教程
  7. “失”失物招领App——项目需求分析
  8. Image captioning评价方法之BLEU (bilingual evaluation understudy)
  9. 基于PLECS的离网(孤岛)并联逆变器的Droop Control下垂控制仿真
  10. 恐龙机器人钢索恐龙形态_《变形金刚5》角色大解析2,机器恐龙钢索成主角,恐龙宝宝登场...