function adjacency_structure = gr_adjacency_structure ( node_num, ...
  node_coordinates, edge_num, edge_nodes )

%*****************************************************************************80
%
%% GR_ADJACENCY_STRUCTURE returns the adjacency structure of a graph.
%
%  Discussion:
%
%    Since we are using MATLAB, we return an actual structure.
%    That is, a cell array.  Entry {I} of the cell array is a
%    vector containing all the nodes which share an edge with
%    node I.
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    24 January 2011
%
%  Author:
%
%    John Burkardt
%
%  Input:
%
%    integer NODE_NUM, the number of nodes.
%
%    real NODE_COORDINATES(2,NODE_NUM), the coordinates of the nodes.
%
%    integer EDGE_NUM, the number of edges.
%
%    integer EDGE_NODES(2,EDGE_NUM), the indices of the two nodes
%    that form each edge.
%
%  Output:
%
%    cell array ADJACENCY_STRUCTURE{NODE_NUM}, the
%    adjacency structure.
%
  adjacency_list = gr_adjacency_list ( node_num, ...
    node_coordinates, edge_num, edge_nodes );

  adjacency_pointer = gr_adjacency_pointer ( node_num, ...
    node_coordinates, edge_num, edge_nodes );

  adjacency_structure = cell ( node_num );

  for i = 1 : node_num
    i1 = adjacency_pointer(i);
    i2 = adjacency_pointer(i+1) - 1;
    adjacency_structure{i} = adjacency_list(i1:i2);
  end

  return
end
