adjmatrix

function adjmatrix( graph, order ) --> matrix

Description

Return the adjacency matrix of graph. The row/column order es defined by order.

Parameters

graph

A graph structure.

order

An array of nodes from graph that defines the row/column of the matrix. Can also be used the select just a part of the nodes,

Return Values

matrix

The adjacency matrix representation of graph.

Code

--ZFUNC-adjmatrix-v1
local function adjmatrix( graph, order ) --> matrix
   local matrix = {}

   for x, v in ipairs( order ) do
      matrix[ x ] = {}
      for y, e in ipairs( order ) do
         if graph[ v ][ e ] then
            matrix[ x ][ y ] = 1
         else
            matrix[ x ][ y ] = 0
         end
      end
   end

   return matrix
end

return adjmatrix

Examples

local t = require( "taptest" )
local adjmatrix = require( "adjmatrix" )
local buildgraph = require( "buildgraph" )
local matrixtostrlst = require( "matrixtostrlst" )

local function tostr( matrix )
   return table.concat( matrixtostrlst( matrix, "%d", "" ), " " )
end

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

local g = buildgraph( nodes, edges )
-- a --> b ---------> c
--        \         /
--         --> d -->
local m = adjmatrix( g, nodes )
t( tostr( m ), "0100 0011 0000 0010" )

m = adjmatrix( g, { "a", "b", "c" } )
t( tostr( m ), "010 001 000" )

t()