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

本文介绍了如何使用Java实现计算图中两点之间所有可达路径的算法,基于深度优先搜索,防止形成回路,核心数据结构是栈,详细解释了代码实现过程。
摘要由CSDN通过智能技术生成

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

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

1.给定图如下:

ef937a07d1c91da10a21a04fa5754c17.png

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值