使用哈希码在Java中实现Dijkstra算法

时间:2013-02-23 03:36:22

标签: java hash dijkstra

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

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个字母)

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

1 个答案:

答案 0 :(得分:1)

两个想法:

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

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

  3. 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));