PROGRAM Main USE Data_Structures USE Algorithms IMPLICIT NONE CHARACTER(LEN=*), PARAMETER :: i_fmt = "(I1)" CHARACTER(LEN=*), PARAMETER :: r_fmt = "(F4.1)" TYPE(Graph) :: g CHARACTER(LEN=256) :: fname INTEGER :: source, destination REAL :: weight TYPE(List) :: path TYPE(Node), POINTER :: p WRITE(*, *) WRITE(*, "(A)") "Legrövidebb út számítása Bellman-Ford algoritmussal." WRITE(*, "(A)") "----------------------------------------------------" WRITE(*, *) WRITE(*, "(A)", ADVANCE="NO") "A gráfot tartalmazó fájl elérési útja: " READ(*, *) fname WRITE(*, *) g = From_File(fname) WRITE(*, "(A)") "A gráf éleinek halmaza (kezdőpont, végpont, súly):" CALL Print_Set(g%edges, i_fmt, r_fmt) WRITE(*, *) WRITE(*, "(A)", ADVANCE="NO") "A keresett út kezdőpontja: " READ(*, *) source WRITE(*, *) WRITE(*, "(A)", ADVANCE="NO") "A keresett út végpontja: " READ(*, *) destination WRITE(*, *) path = Bellman_Ford(g, source, destination) WRITE(*, "(A)") "A legrövidebb utat alkotó élek:" CALL Print_List(path, i_fmt, r_fmt) WRITE(*, *) WRITE(*, "(A)") "A legrövidebb út:" WRITE(*, i_fmt, ADVANCE="NO") source p => path%first weight = 0 DO WHILE (ASSOCIATED(p)) WRITE(*, "(A)", ADVANCE="NO") " -> " WRITE(*, i_fmt, ADVANCE="NO") p%data%destination weight = weight + p%data%weight p => p%next END DO WRITE(*, *) WRITE(*, *) WRITE(*, "(A)") "A legrövidebb út összsúlya:" WRITE(*, r_fmt) weight END PROGRAM Main