    Program h03adfe

!     H03ADF Example Program Text

!     Mark 24 Release. NAG Copyright 2012.

!     .. Use Statements ..
      Use nag_library, Only: f11zaf, h03adf, nag_wp
!     .. Implicit None Statement ..
      Implicit None
!     .. Parameters ..
      Integer, Parameter               :: nin = 5, nout = 6
      Character (1), Parameter         :: dup = 'F', zero = 'R'
!     .. Local Scalars ..
      Real (Kind=nag_wp)               :: splen
      Integer                          :: ifail, j, lenc, n, ne, nnz, ns
      Logical                          :: direct
!     .. Local Arrays ..
      Real (Kind=nag_wp), Allocatable  :: d(:), work(:)
      Integer, Allocatable             :: icol(:), irow(:), iwork(:), path(:)
!     .. Executable Statements ..
      Write (nout,*) 'H03ADF Example Program Results'

!     Skip heading in data file
      Read (nin,*)

      Read (nin,*) n, ns, ne, nnz, direct
      Allocate (d(nnz),work(2*n),icol(nnz),irow(nnz),iwork(3*n+1),path(n))

      Read (nin,*)(d(j),irow(j),icol(j),j=1,nnz)

!     Reorder the elements of D into the form required by H03ADF.

      ifail = 0
      Call f11zaf(n,nnz,d,irow,icol,dup,zero,iwork,iwork(n+2),ifail)

!     Find the shortest path between vertices NS and NE.

      ifail = 0
      Call h03adf(n,ns,ne,direct,nnz,d,irow,icol,splen,path,iwork,work,ifail)

!     Print details of shortest path.

      lenc = n

loop: Do j = 0, n - 1

        If (path(j+1)==0) Then
          lenc = j
          Exit loop
        End If

      End Do loop

      Write (nout,99999) 'Shortest path = ', (path(j),j=1,lenc)
      Write (nout,99998) 'Length of shortest path = ', splen

99999 Format (/1X,A,10(I2:'  to '))
99998 Format (/1X,A,G16.6)
    End Program h03adfe
