// You can pass aditional parameters as pairs. // Example graph_to_dot(adj, 'filename', 'myfile.txt') // 'filename' - string (default is 'tmp.dot') // 'node_label' - array of strings (node labels) function write_mat_to_file(adj, varargin) // Parameters directed = 1 filename = 'tmp.dot'; arc_label = []; node_label = []; width = 10; height = 10; // Read user parameters nargin = length(varargin) for i = 1:2:nargin-1 if varargin(i) == 'node_label' then node_label = varargin(i+1); elseif varargin(i) == 'arc_label' then arc_label = varargin(i+1); end end handler = mopen(filename, 'w'); // Check for errors if (handler == -1) then error('Cannot open file for writing') end if directed then mfprintf(handler, 'digraph G{\n'); arctxt = '->'; if isempty(arc_label) labeltxt = ''; end else mfprintf(handler, 'graph G{\n'); arctxt = '--'; end mfprintf(handler, 'center = 1;\n'); // Node data dims = size(adj); nnodes = dims(1); disp('nnodes: '); disp(nnodes); for node =1:nnodes if isempty(node_label) then mfprintf(handler, '%d;\n', node); else mfprintf(handler, '%d [label = %s];\n', node, node_label(node)); end end // Edge data for node1=1:nnodes for node2=1:nnodes val = adj(node1, node2) if (val == 1) then mfprintf(handler, '%d ' + arctxt + ' %d', node1, node2); if (~isempty(arc_label)) then mfprintf(handler, ' [label = %s];', arc_label(node1, node2)); end mfprintf(handler, '\n'); end end end mfprintf(handler, '}\n'); mclose(handler); endfunction node_labels = ['A', 'B', 'C']; edge_labels = ['','10',''; '','','12'; '15','','']; mat = [0,1,0 ; 0,0,1; 1,0,0]; write_mat_to_file(mat, 'node_label', node_labels, 'arc_label', edge_labels);