RosettaCodeData/Task/Dijkstras-algorithm/Ring/dijkstras-algorithm.ring

78 lines
1.9 KiB
Plaintext

# Project : Dijkstra's algorithm
graph = [["a", "b", 7],
["a", "c", 9],
["a", "f", 14],
["b", "c", 10],
["b", "d", 15],
["c", "d", 11],
["c", "f", 2],
["d", "e", 6],
["e", "f", 9]]
dbegin = "a"
dend = "e"
powlen = pow(2,len(graph)) - 1
dgraph = list(powlen)
dtemp = list(powlen)
lenold = 10
lennew = 0
sumold = 30
sumnew = 0
powerset(graph)
for n = 1 to len(dgraph)
dtemp[n] = str2list(substr(dgraph[n], " ", nl))
next
for n = 1 to len(dtemp)
if len(dtemp[n]) > 3 and dtemp[n][1] = dbegin and dtemp[n][len(dtemp[n])-1] = dend
flag = 1
for m = 1 to len(dtemp[n])/3-1
if dtemp[n][m*3-1] != dtemp[n][m*3+1]
flag = 0
ok
next
if flag = 1
lennew = len(dtemp[n])
if lennew <= lenold
lenold = lennew
sumnew = 0
for m = 1 to len(dtemp[n])/3
sumnew = sumnew + dtemp[n][m*3]
next
if sumnew < sumold
sumold = sumnew
gend = dtemp[n]
ok
ok
ok
ok
next
str = ""
see dbegin + " " + dend + " : "
for m = 1 to len(gend)/3
str = str + gend[(m-1)*3 + 1] + " " + gend[(m-1)*3 + 2] + " " + gend[(m-1)*3 + 3] + " -> "
next
str = left(str,len(str)-4)
str = str + " cost : " + sumold + nl
see str + nl
func powerset(list)
s = "{"
p = 0
for i = 2 to (2 << len(list)) - 1 step 2
s = ""
for j = 1 to len(list)
if i & (1 << j)
s = s + list[j][1] + " " + list[j][2] + " " + list[j][3] + " "
ok
next
if right(s,1) = " "
s = left(s,len(s)-1)
ok
p = p + 1
dgraph[p] = s
next