rmedge

function rmedge( graph, from, to [, undirected] ) --> graph

Description

Removes a directed or undirected edge from the graph.

Parameters

graph

The graph that should be modified.

from

Source node of the edge.

to

Destination node of the edge.

undirected

Optional value that is by default false. Can be true to remove undirected edges.

Return Values

graph

The modified graph.

Code

--ZFUNC-rmedge-v1
local function rmedge( graph, from, to, undirected ) --> graph
   if not graph[ from ] then return graph end
   if not graph[ to ] then return graph end
   graph[ from ][ to ] = nil
   if undirected then
      graph[ to ][ from ] = nil
   end
   return graph
end

return rmedge

Examples

local t = require( "tapered" )
local rmedge = require( "rmedge" )
-- util functions
local adjmatrix = require( "adjmatrix" )
local buildgraph = require( "buildgraph" )
local matrixtostrlst = require( "matrixtostrlst" )

local function tostr( graph, order )
   local m = adjmatrix( graph, order )
   return table.concat( matrixtostrlst( m, "%d", "" ), " " )
end

local nodes = { "a", "b", "c", "d" }
local edges = {
   { "a", "b" },
   { "b", "c" },
   { "b", "d" },
   { "d", "c" }
}

local g = buildgraph( nodes, edges, true )
-- a <--> b <-----------> c
--         \           /
--          <--> d <-->
t.is( tostr( g, nodes ), "0100 1011 0101 0110" )

g = rmedge( g, "b", "a" )
-- a --> b <-----------> c
--        \           /
--         <--> d <-->
t.is( tostr( g, nodes ), "0100 0011 0101 0110" )

g = rmedge( g, "d", "b", false )
-- a --> b <----------> c
--        \           /
--         --> d <-->
t.is( tostr( g, nodes ), "0100 0011 0101 0010" )

g = rmedge( g, "d", "c", true )
-- a --> b <----------> c
--        \
--         --> d
t.is( tostr( g, nodes ), "0100 0011 0100 0000" )

g = rmedge( g, "b", "c", true )
-- a --> b --> d
-- [ c ]
t.is( tostr( g, nodes ), "0100 0001 0000 0000" )

g = rmedge( g, "x", "y" ) -- even the nodes not exist
t.is( tostr( g, nodes ), "0100 0001 0000 0000" )

t.done()

See also