resource ShortPath () import workpool const int n = 20 # number of vertices const int infinity = 1000000 # maxint int weight [n,n]; int mindist [n]; sem save[n] = ([n] 1) bool inflag [n]; int start = 1 # Eingabe der Gewichtsmatrix string[20] name; getarg(1, name) file filem = open(name, READ) for [i= 1 to n] { for [j= 1 to n] { read(filem, weight[i][j]) }} write("Matrix eingelesen") for [i=1 to n] { mindist[i] = infinity; inflag[i] = false } mindist[start] = 0; inflag[start] = true; putwork(1,start) process worker [me = 1 to p] { work vertex; int newdist getwork(me,vertex); while (vertex != -1) { # solange Termination nicht vorliegt inflag[vertex] = false for [i=1 to n] { if (weight[vertex,i] < infinity) # Kante vorhanden? { newdist = mindist[vertex] + weight[vertex,i]; P(save[i]); if (newdist < mindist[i]) { mindist[i] = newdist; V(save[i]) if (not inflag[i]) # i noch nicht im Pool? { inflag[i]= true; putwork(me,i) }} else { V(save[i]) } } } getwork(me,vertex) # neuen Knoten anfordern nap(int(random()*100)) } } final { write("Ergebnis:") # Ausgabe des Ergebnisses for [i=1 to n] { writes (mindist[i], " ") } } end ShortPath