如何在Java中实现返回最短路径长度的深度优先搜索
我目前正在编写一个程序,它获取一个节点图,并返回特征路径长度(从一个节点到每个其他节点的平均路径长度,然后对每个节点重复,然后再次平均)。我已经完成了所有的工作,但是我不确定如何实现节点的深度优先搜索,以找到从一个节点到另一个节点的最短路径。这就是我目前所拥有的如何在Java中实现返回最短路径长度的深度优先搜索,java,graph,path,nodes,depth-first-search,Java,Graph,Path,Nodes,Depth First Search,我目前正在编写一个程序,它获取一个节点图,并返回特征路径长度(从一个节点到每个其他节点的平均路径长度,然后对每个节点重复,然后再次平均)。我已经完成了所有的工作,但是我不确定如何实现节点的深度优先搜索,以找到从一个节点到另一个节点的最短路径。这就是我目前所拥有的 int dist = 0; List<Node> path = new ArrayList<Node>(); List<Node> shrtPath =
int dist = 0;
List<Node> path = new ArrayList<Node>();
List<Node> shrtPath = new ArrayList<Node>();
Node curNode = rtNode;
if (rtNode == goalNode) {
return dist;
}
path.add(curNode);
for (int l = 0; l < rtNode.connections.size(); l++) {
Node tempNode = new Node();
curNode = rtNode.connections.get(l);
for (int i = 0; i < curNode.connections.size(); i++) {
tempNode = curNode.connections.get(i);
path.add(tempNode);
if (curNode.connections.get(i) == goalNode) {
if (path.size() < shrtPath.size()) {
shrtPath.clear();
shrtPath = path;
}
}
}
}
dist = shrtPath.size();
return dist;
int dist=0;
列表路径=新的ArrayList();
List shrtPath=new ArrayList();
节点curNode=rtNode;
if(rtNode==goalNode){
返回距离;
}
添加路径(curNode);
对于(int l=0;l
我知道这是不完整的,但我不确定从这里走到哪里,或者我是否朝着正确的方向前进。我知道我需要能够搜索根节点及其连接,但我不确定如何循环连接的连接等等。我还意识到我必须标记访问的节点,因为我的节点类中有一个布尔值,我只是还没有实现它。这也是我的节点类
import java.util.ArrayList;
import java.util.List;
public class Node {
List <Node> connections = new ArrayList<Node>();
int cons = 0;
boolean hub;
boolean visited = false;
public Node() {
hub = false;
}
public void setNbs(Node nb1, Node nb2) {
connections.add(nb1);
connections.add(nb2);
}
public boolean addExtraCon(Node con) {
for (int i = 0; i < connections.size(); i++) {
if(connections.get(i) == con) {
return false;
}
}
connections.add(con);
return true;
}
public boolean makeHub() {
hub = true;
return hub;
}
public int numberOfConnections() {
cons = connections.size();
return cons;
}
public boolean isHub() {
if (hub == true) {
return true;
}
return false;
}
}
import java.util.ArrayList;
导入java.util.List;
公共类节点{
列表连接=新建ArrayList();
int cons=0;
布尔中心;
布尔值=假;
公共节点(){
hub=false;
}
公共无效集合NBS(节点nb1、节点nb2){
连接。添加(nb1);
连接。添加(nb2);
}
公共布尔加法器(节点con){
对于(int i=0;i
我希望这有助于任何和所有的帮助是非常感谢。提前谢谢。线索:你知道DPS可以使用堆栈实现吗?@noMAD是的,但我已经有了一个ArrayList,所以我想我会使用它。我非常愿意重做使用堆栈的方法。尽管如此,我还是希望能得到任何帮助。看看这个。