[英]Dijkstra in Java implementation
我已經在Java中為項目編寫了以下dijkstra實現。 當我運行測試時,如果startNode是0節點,則工作正常,但是如果startNode是另一個節點,則它不是。 有人可以幫我嗎? 我會很感激...
這是代碼:
double[][] nodesDistance = new double[graph.getNumOfNodes()][graph.getNumOfNodes()];
double[] distance = new double[graph.getNumOfNodes()];
int[] preD = new int [graph.getNumOfNodes()];
int[] visited = new int [graph.getNumOfNodes()];
double min;
int nextNode = 0;
for (int i = startNode; i < 0; i--) {
visited[i] = 0;
preD[i] = 0;
for (int j = startNode; j < 0; j--) {
if (graph.existsEdge(i, j) == true) {
nodesDistance[i][j] = graph.getEdgeDistance(i, j);
}else {
nodesDistance[i][j] = Double.POSITIVE_INFINITY;
}
}
}
for (int i = startNode; i < graph.getNumOfNodes(); i++) {
visited[i] = 0;
preD[i] = 0;
for (int j = startNode; j < graph.getNumOfNodes(); j++) {
if (graph.existsEdge(i, j) == true) {
nodesDistance[i][j] = graph.getEdgeDistance(i, j);
}else {
nodesDistance[i][j] = Double.POSITIVE_INFINITY;
}
}
}
distance = nodesDistance[startNode];
distance[startNode] = 0;
visited[startNode] = 1;
for (int i = startNode; i < 0; i--) {
min = 999.0;
for (int j = startNode; j < 0; j--) {
if ((min > distance[j]) && (visited[j] != 1)) {
min = distance[j];
nextNode = j;
}
}
visited[nextNode] = 1;
for (int c = startNode; c < 0; c--) {
if (visited[c] != 1) {
if (min + nodesDistance[nextNode][c] < distance[c]) {
distance[c] = min + nodesDistance[nextNode][c];
preD[c] = nextNode;
}
}
}
}
for (int i = startNode; i < graph.getNumOfNodes(); i++) {
min = 999.0;
for (int j = startNode; j < graph.getNumOfNodes(); j++) {
if ((min > distance[j]) && (visited[j] != 1)) {
min = distance[j];
nextNode = j;
}
}
visited[nextNode] = 1;
for (int c = startNode; c < graph.getNumOfNodes(); c++) {
if (visited[c] != 1) {
if (min + nodesDistance[nextNode][c] < distance[c]) {
distance[c] = min + nodesDistance[nextNode][c];
preD[c] = nextNode;
}
}
}
}
for (int i = 0; i < graph.getNumOfNodes(); i++) {
result.nodeDistance[i] = distance[i];
result.nodeThrough[i] = preD[i];
}
好吧,因為沒有人回答您的問題,我想我會盡力的。 我沒有早點做的原因是因為我不確定我是否真的可以回答您的問題,因為我無法立即看到問題是由您的代碼引起的。
您說您的問題是您的代碼無法處理未標識為ID 0的起始節點。我認為我能為您提供幫助的唯一方法是僅說明我將如何實現Dijkstra的算法,因為我的方法似乎有所不同從你的。
步驟1.初始化:
第2步:搜索:
對於相鄰節點中的每個節點,請查看它們的行進距離值是否大於當前節點行進的距離以及當前節點與鄰居之間的距離之和。
重復。
步驟3.回溯
現在,我知道這個解釋包含了許多您已經知道的信息,盡管就像我剛開始所說的那樣,我不確定您的知識/代碼中的問題是否存在。 希望通過閱讀本文可以找到所需的內容。 如果沒有,我將嘗試找到更好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.