mne sa to po tej uprave java kodu zacykli :-)
Filipovi tam vypadla ta část s invalid polem. Mělo by to být asi nějak takto:
import java.util.Random;
public class Dijkstra
{
public static int compute(final int count, int start, int stop, final int weight[])
{
boolean[] invalid = new boolean[count];
int distance[] = new int[count];
for(int i = 0; i < count; i++)
distance[i] = Integer.MAX_VALUE;
int u = start;
distance[u] = 0;
while(u != stop)
{
invalid[u] = true;
int minDistance = distance[u];
int min = Integer.MAX_VALUE;
int next = -1;
for(int v = 0; v < count; v++)
{
if(invalid[v])
continue;
int distanceThroughU = minDistance + weight[u * count + v];
if(distanceThroughU < distance[v])
distance[v] = distanceThroughU;
if(distance[v] < min)
{
next = v;
min = distance[v];
}
}
u = next;
}
return distance[u];
}
public static void main(String[] args)
{
long time = System.currentTimeMillis();
final int count = 5000;
final Random rand = new Random();
int weight[] = new int[count * count];
for(int i = 0; i < count * count; i++)
weight[i] = rand.nextInt(100) + 1;
int res = compute(count, 0, count - 1, weight);
time = System.currentTimeMillis() - time;
System.out.println("result: " + res);
System.out.println("time : " + time);
}
}