java计算图两点之间的路径总结

本文实例为大家分享了java计算图两点之间的所有路径的具体代码,供大家参考,具体内容如下

1.给定图如下:

2.求0到3之间可达的所有路径

这里问题就是关于搜索遍历的问题,但其中需要注意到不能产生回路或环.

算法描述如下:

top_node:当前栈顶元素

adjvex_node;当前top_node已经访问的邻接点

next_node:即将访问的元素(top_node的第adjvex_node个邻接点所对应的元素)

找出所有路径采用的是遍历的方法,以“深度优先”算法为基础。从源点出发,先到源点的第一个邻接点N00,再到N00的第一个邻接点N10,再到N10的第一个邻接点N20...当遍历到目标点时表明找到一条路径。

上述代码的核心数据结构为一个栈,主要步骤:

①源点先入栈,并进行标记

②获取栈顶元素top_node,如果栈顶为终点时,即找到一条路径,栈顶元素top_node出栈,此时adjvex_node=top_node,新的栈顶元素为top_node,否则执行③

③从top_node的所有邻接点中,从adjvex_node为起点,选取下一个邻接点next_node;如果该元素非空,则入栈,使得adjvex_node=-1,(adjvex_node=-1代表top_node的邻接点一个还没有访问)做入栈标记。否则代表没有后续节点了,此时必须出栈栈顶元素,并置adjvex_node为该栈顶元素,并做出栈标记。

④为避免回路,已入栈元素要记录,选取新入栈顶点时应跳过已入栈的顶点,当栈为空时,遍历完成

3.java代码实现

1)图结构

点表

public class Vertex {

//存放点信息

public int data;

//与该点邻接的第一个边节点

public Edge firstEdge;

}

边表(代表与点相连的点的集合)

//边节点

public class Edge {

//对应的点下表

public int vertexId;

//边的权重

public int weight;

//下一个边节点

public Edge next;

//getter and setter自行补充

}

2).算法实现

public class Vertex {

//存放点信息

public int data;

//与该点邻接的第一个边节点

public Edge firstEdge;

}

两点之间的连线java_java计算图两点之间的路径实例代码相关推荐

  1. 此时不应有java_Java 锁的知识总结及实例代码

    这篇文章主要介绍了Java 锁的知识总结及实例代码,需要的朋友可以参考下 java中有哪些锁 在java中锁主要两类:内部锁synchronized和显示锁java.util.concurrent.l ...

  2. 函数重写 java_java 函数的重载和重写实例代码

    在java中多态分为两种编译时多态(重载)和运行时多态(重写),编译时多态又叫前绑定,运行时多态又叫后绑定. 下面用一个例子说明: public class OverloadAndOverwrite ...

  3. 组合的示例代码 java_java实现Composite组合模式的实例代码

    //20210121 写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现组合模式 组合模式核心思想类似文件夹的概念,构件树形结构,树形有叶子结点和文件夹 ...

  4. js 画两点之间的连线

    文章目录 思路描述 根据css3角度旋转 两点之间,利用离散的点,一个一个的拼凑 案例 案例一:CSS3 角度变换 案例二:手动添加两点之间的连线 思路描述 根据css3角度旋转 根据两点,计算出两点 ...

  5. 在Visio中实现任意两点之间的连线

    在Visio中有时候很难实现两点之间的连线,往往连线会胡乱跳转到其他位置,本人在网上查找了各种方法,网上提到最多的方法是取消自动连接,然而本人实验上百次也没什么卵用,连线还是会自动跳转到其他位置.比如 ...

  6. 使用二阶贝塞尔曲线画出两点之间的连线

    使用二阶贝塞尔曲线画出两点之间的连线 二阶贝塞尔曲线公式 控制点的位置 游戏中需要手动生成多个点来连接两个关卡,以达到更加可视化的目的. 最终效果如图: 二阶贝塞尔曲线公式 B(t) = (1-t)2 ...

  7. 手机端网页中图片之间出现白线的解决方法

    手机端网页中图片之间出现白线的解决方法 参考文章: (1)手机端网页中图片之间出现白线的解决方法 (2)https://www.cnblogs.com/syzdidi/p/9686463.html 备 ...

  8. 关于5G无线网络设备之间的连线总结

    5G室分设备之间的连线主要有馈线.网线.光电混合缆.光纤四种: 种类 位置 说明 馈线         连接pRRU和天线 RRU-天线之间一般是RRU-跳线-馈线-跳线-天线:现在一般RRU上塔靠近 ...

  9. 如果在一个工程中有两个vhd文件,就相当于有两个模块,那么对于这个工程整体的bdf文件生成,怎么把这两个模块都加到同一个bdf文件中。bdf文件中两个模块之间的连线及输入输出,是自己输进去的还是自动生

    如果在一个工程中有两个vhd文件,就相当于有两个模块,那么对于这个工程整体的bdf文件生成,怎么把这两个模块都加到同一个bdf文件中.bdf文件中两个模块之间的连线及输入输出,是自己输进去的还是自动生 ...

最新文章

  1. SyntaxError: EOL while scanning string literal
  2. 【Python】Python中令人头疼的变量作用域问题,终于弄清楚了
  3. 自己写的小程序 deb打包
  4. 全文搜索引擎选 ElasticSearch 还是 Solr
  5. JavaEE笔记(五)
  6. spring service 怎么拿到数据源信息_SSM(SpringMVC + Spring + MyBatis)中各层作用及关系Ⅰ...
  7. OpenCASCADE:网格之BRepMesh 架构
  8. Python之List和Tuple类型(入门3)
  9. 在SQL Server中设置最大并行度的不同方法
  10. pat上写java程序_如何运行Java程序和设置CLASSPAT
  11. AMD:40年三个关键词
  12. 密码编码学与网络安全笔记(第7版)
  13. Apache jmeter 压测
  14. c++用键盘按键控制光标移动_如何在Windows10中用键盘控制鼠标光标
  15. 爬虫爬取豆瓣电影排行,保存到excel和SQLite
  16. 图片免费压缩在线的方法有哪些
  17. kml文件转成cvs_KML 转图层 (转换)
  18. 新手使用Docker教程
  19. 关于Google账号被封、被下架、提审被拒等原因分析及建议
  20. 泛微oa流程表单之请假单(判断请假结束时间不能小于等于请假开始时间)

热门文章

  1. Python学习笔记:常用内建模块1
  2. stm32串口通信(初学者对于串口通信的理解)
  3. python调用可执行文件
  4. 【转】在Ubuntu中运行Exe程序
  5. 神经网络网络参数的取值问题
  6. [云炬创业基础笔记]第七章创业资源测试3
  7. [云炬创业基础笔记]第二章创业者测试20
  8. 别人写好的爬虫怎么运行_怎么写好楷书?
  9. 3Dslicer2:数据与帮助
  10. VTK修炼之道49:图形基本操作进阶_网格平滑(点云的曲面重建技术)