dijstra algoritme

Algemene discussies en vragen omtrent Liberty BASIC programma's. Stuur zoveel mogelijk delen van listings (snippets) in als je hulp wilt.

Moderators: anthonio, Abcott

dijstra algoritme

Berichtdoor bluatigro » do jul 31, 2014 10:17 am

dit is een poging tot t vertalen van :

http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

in LB

ik kom zo ver :
Code: Selecteer alles
WindowWidth = DisplayWidth
WindowHeight = DisplayHeight
global winx , winy
winx = WindowWidth
winy = WindowHeight
global maxvertex , maxlink , tdist , tpre , tedge , tx , ty
maxvertex = 20
maxlink = 3
tdist=0
tpre=1
tedge=2
tx=0
ty=1
dim graph( maxvertex , in( maxlink , tedge ) )
open "dijkstra" for graphics as #m
  #m "trapclose [quit]"
  #m "font Ariel 30 bold"
  call createMaze
  call drawMaze
wait
[quit]
  close #m
end



end
sub drawMaze
  for i = 0 to maxvertex
    for j = 0 to maxlink
      if graph(i,in(j,tedge)) then
        x1 = graph(i,tx)
        y1 = graph(i,ty)
        x2 = graph(graph(i,in(j,tedge)),tx)
        y2 = graph(graph(i,in(j,tedge)),ty)
        #m "down"
        #m "line ";x1;" ";y1;" ";x2;" ";y2
        #m "up"
      end if
    next j
  next i
  for i = 0 to maxvertex
    #m "goto ";graph(i,tx);" ";graph(i,ty)
    #m "down"
    #m "\";i
    #m "up"
  next i
end sub
sub createMaze
  for i = 0 to maxvertex
    graph(i,tx) = range( 50 , winx - 50 )
    graph(i,ty) = range( 50 , winy - 50 )
  next i
  for i = 0 to maxvertex * maxlink / 2
    a = range( 0 , maxvertex )
    b = range( 0 , maxvertex )
    call add a , b
  next i
end sub
sub add no , b
  nolink = 0
  while nolink < maxlink _
  and graph(no,in(nolink,tedge))<>0 _
  and graph(no,in(nolink,tedge))<>b
    nolink = nolink + 1
  wend
  if nolink >= maxlink then exit sub
  blink = 0
  while blink < maxlink _
  and graph(b,in(blink,tedge))<>0 _
  and graph(b,in(blink,tedge))<>no
    blink = blink + 1
  wend
  if blink >= maxlink then exit sub
  graph(no,in(nolink,tedge)) = b
  graph(b,in(blink,tedge)) = no
end sub
function lenght( x1 , y1 , x2 , y2 )
  lenght = sqr( ( x1 - x2 ) ^ 2 + ( y1 - y2 ) ^ 2
end function
function in( link , a )
  in = link * ty + a + 2
end function
function range( l , h )
  range = rnd(0) * ( h - l ) + l
end function


ik kreeg n 'isEmpty' error
bluatigro
 
Berichten: 306
Geregistreerd: za sep 27, 2008 6:01 pm

Re: dijstra algoritme

Berichtdoor ForNext » wo aug 06, 2014 9:04 pm

Ik ben even aan het experimenteren met jouw listing.

In de 1e functie ontbreekt aan het einde van de tweede regel een )

En als je "call createMaze" na "call drawMaze" plaatst, ben je "isEmpty" even kwijt.
Maar je ziet nog niets.

Ik ga verder proberen.
Cursist LB Amstelveen
ForNext
 
Berichten: 60
Geregistreerd: za okt 27, 2007 9:40 am
Woonplaats: Amstelveen


Keer terug naar Liberty BASIC Code

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron