stpaths←{                           ⍝ Spanning tree paths.
    tree←⍵                          ⍝ spanning tree.
    root←⍵⍳¯1                       ⍝ index of root vertex.
    paths(root=⍳⍴⍵)↑¨root          ⍝ initial path vector.
    paths{                          ⍝ path to current vertices.
        next(⍵=⊂tree)/¨⊂⍳⍴tree     ⍝ vertices at next tree level.
        (⊂⍬)∧.≡next:⍺               ⍝ all null: finished.
        exts(⊂¨⍵⊃¨⊂⍺),¨¨next       ⍝ paths to next tree level.
        indx←↑,/next                ⍝ accumulated indices.
        paths(↑,/exts)@indx⊢⍺      ⍝ set next level paths in paths vector.
        pathsindx                ⍝ advance to next tree level.
    }root                           ⍝ index of starting vertex.
}

code_colours

test script

Back to: notes

Back to: Workspaces