78 lines
1.9 KiB
Plaintext
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
|