next up previous
    Next: Data Up: Kruskal's Algorithm for Computing Previous: Kruskal's Algorithm for Computing

    LDL++ Source Code

    database ( {
            g(X:string, Y:string, C:integer)
    }).
    
    export edge(I, X).
    export node_set(J, X, Y, C).
    export graph(J, X, Y, C).
    export delta_graph(J, X, Y).
    export sarc(J, SX, SY).
    
    graph(0,X,Y,C) <- g(X,Y,C).
    
    delta_graph(J+1, X, Y) <- 
            sarc(J+1, SX, SY), 
            node_set(J, X, SX, _), 
            node_set(J, Y, SY, _),
            graph(J, X, Y, _).
    
    graph(J+1, X, Y, C) <- 
            graph(J, X, Y, C), 
            ~delta_graph(J+1, X, Y),
            ~delta_graph(J+1, Y, X).
     
    edge(0, (nil, nil, 0)).
    edge(J+1, l_c<(X, Y, C)>) <- graph(J, X, Y, C).
    
    sarc(J+1, SX, SY)<-
        edge(J+1, (X, Y, _)), node_set(J, X, SX, CX), node_set(J, Y, SY, CY), CX>=CY.
    sarc(J+1, SY, SX)<-
        edge(J+1, (X, Y, _)), node_set(J, X, SX, CX), node_set(J, Y, SY, CY), CX<CY.
    
    node_set(0,X,X,1)<-g(X,_,_).
    node_set(0,X,X,1)<-g(_,X,_).
    
    node_set(J+1, Y, SX, C)<-
        sarc(J+1, SX, SY), 
        node_set(J, _, SX, C2), 
        node_set(J, Y, SY, C1), 
        C=C1+C2.
    node_set(J+1, X, SX, C)<-node_set(J, X, SX, C), ~sarc(J+1, _, SX).
    
    single(l_c, (X, Y, C), (X,Y, C)).
    multi(l_c, (X1, Y1, C1), (X2, Y2, C2), (X2, Y2, C2)) <- C2 <= C1.
    multi(l_c, (X1, Y1, C1), (X2,Y2, C2), (X1, Y1, C1)) <- C2 > C1.
    


    Haixun Wang
    4/22/1998