在Java中查找最短路径而不定义顶点/节点

时间:2016-08-12 07:33:43

标签: java path dijkstra indoor-positioning-system shortest

我正在尝试实施室内导航系统,我必须找到从我现在的位置到达某一点的最短路径。

我已达成的目标: 使用Dijkstra的算法/时髦和测试代码,我用权重定义4个节点,然后尝试找到从源到目的地的最短路径。

现在的情况是,如果假设我在地图上未定义为节点的点,我想导航到可能是也可能不是节点的点,那么在这种情况下如何查找最短的路径?

目前的测试代码我正在使用:

package indoornav.shortestpath;

import java.util.List;

import es.usc.citius.hipster.algorithm.Hipster;
import es.usc.citius.hipster.graph.GraphBuilder;
import es.usc.citius.hipster.graph.GraphSearchProblem;
import es.usc.citius.hipster.graph.HipsterDirectedGraph;
import es.usc.citius.hipster.model.problem.SearchProblem;

public class Client3 {
    public static void main(String[] args)
    {
        HipsterDirectedGraph<String,Double> graph = 
                GraphBuilder.<String,Double>create()
                 .connect("A").to("D").withEdge(10d)
                 .connect("A").to("C").withEdge(12d)
                 .connect("C").to("A").withEdge(12d)
                 .connect("C").to("B").withEdge(10d)
                 .connect("B").to("D").withEdge(10d)
                 .connect("B").to("C").withEdge(10d)
                 .connect("D").to("A").withEdge(10d)
                 .connect("D").to("B").withEdge(10d)

                 .createDirectedGraph();

            // Create the search problem. For graph problems, just use
            // the GraphSearchProblem util class to generate the problem with ease.
            SearchProblem p = GraphSearchProblem
                                       .startingFrom("A")
                                       .in(graph)
                                       .takeCostsFromEdges()
                                       .build();

            // Search the shortest path from "A" to "F"
            System.out.println(Hipster.createDijkstra(p).search("B"));
    }
}

    enter code here

1 个答案:

答案 0 :(得分:0)

我认为您可以找到您所在位置和所需位置的两个邻居节点之间的最短路径。然后需要添加结果从您的真实位置到起始节点以及从目标位置到目标节点的路径:

A` - real location
A  - start node(neighbor for A`)
B` - target location
B  - target node(neighbor for B`)

result = shortest(A,B) + (A`-A) + (B`-B)