File: dijkst.f

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (41 lines) | stat: -rw-r--r-- 941 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
      subroutine dijkst(i0,la1,long,lp1,ls1,m,n,p,pi)
      implicit integer (a-z)
      dimension lp1(*),ls1(m),la1(m),p(n)
      doubleprecision pi(n),long(m),infr,x,y
      if (i0 .lt. 0 .or. i0 .gt. n) then
         call erro('bad internal node number')
         return
      endif
      infr=10.e6
      infe=32700
      do 10 i=1,n
         pi(i)=  infr
         p(i)= - infe
 10   continue
      pi(i0)=0
      p(i0)=0
      j=i0
 100  continue 
      if(lp1(j).eq.lp1(j+1))goto 130
      do 120 ll = lp1(j),lp1(j+1)-1
         u=la1(ll)
         i=ls1(ll)
         if(p(i).gt.0) goto 120
         x=pi(i)
         y=pi(j) + long(u)
         if(x.le.y) goto 120
         p(i)= -j
         pi(i)=y
 120  continue
 130  continue
      p(j) = -p(j)
      j=0
      x=infr
      do 200 i=1,n
         if(p(i).ge.0) goto 200
         if(pi(i).ge.x) goto 200
         j=i
         x=pi(i)
 200  continue
      if(j.gt.0) goto 100
      end