【问题标题】:Implementing Dijkstra's algorithm in Java using hash code使用哈希码在 Java 中实现 Dijkstra 算法
【发布时间】:2013-02-23 03:36:22
【问题描述】:

我的图表的实现是以下哈希表:

public class DiGraphHash{

private int numNodos, numArcos;
private TheList<Nodo> nodos[];
private TheList<Arco> arcos[];
private TheList<Arco> preds[];

}

TheList 是我自己制作的列表。

对于 Dijkstra 的算法,我需要映射每个节点的成本和到达该节点的路径。 我有以下两个数组:

   int[] cost = new cost[num_nodes];
   Nodo[] path = new Nodo[num_nodes];

另一个重要的细节是,我的节点将是字母 A、B、C、D。

所以当我映射我的节点时,例如假设我必须将成本分配给节点 A,我如何找到数组中的位置?

我正在考虑使用 hashcode % array.length 但我不确定是否会发生冲突(考虑到它只有 1 个字符)

我不是在询问代码,而是需要这个想法。

【问题讨论】:

    标签: java hash dijkstra


    【解决方案1】:

    两个想法:

    1. cost 字段添加到您的Nodo 类。这样,您只需管理一组节点,而不是单独的一组成本。您可以在实例化节点时分配成本,并在以后轻松查找它们。

    2. 比两个数组更好的数据结构可能是映射,其中键是节点本身,值是节点的成本。这是一个例子:

    HashMap<Nodo, Integer> nodesToCosts = new HashMap<Nodo, Integer>();
    
    nodes.put(nodeA, new Integer(5));
    nodes.put(nodeB, new Integer(20));
    nodes.put(nodeC, new Integer(10));
    nodes.put(nodeD, new Integer(5));
    

    【讨论】:

    • 好的,我喜欢这个主意!谢谢。这个怎么样:为了保存每个节点的最短“路径”,我将创建一个 List 数组,其中 List 有 Arco(英文中的 Arcs),这样我可以使用 Hashcode 来查找节点的 Arc,并且该弧的来源将是“最短的前任。不知道我是否解释得很好。
    • 这听起来很有希望。您还可以查看其他人的 Java 实现:en.literateprograms.org/Dijkstra%27s_algorithm_%28Java%29
    猜你喜欢
    • 2019-04-02
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    相关资源
    最近更新 更多