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

标签 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. 向您的 Nodo 类添加一个 cost 字段。这样,您只需管理一组节点,而不用管理一组单独的成本。您可以在实例化节点时分配成本,并在以后轻松查找它们。

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

关于java - 使用哈希码在 Java 中实现 Dijkstra 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036758/

相关文章:

algorithm - Dijkstra 算法运行时

algorithm - 为什么 Dijkstra 算法不适用于负权重边?

algorithm - 理解为什么 Dijkstra 算法在具有负边的图上失败的解释?

java - 获取 GDK_BACKEND 与 debian 中的可用显示错误不匹配

java - AWS S3 使用 putObject(String,String,String) 时更改文件扩展名

mysql - 选择哪个哈希函数来索引 mysql 上的 uuid 字符串? md5,crc64 或 fnv

c - 关于哈希函数

java - 有什么办法可以杀死正在运行的死锁线程 "http:8080-42",它阻塞了所有其他线程

java - 将字符串映射到其相应值的最佳方法

file - 一个合适的哈希函数来检测数据损坏/检查数据完整性?