如何从二维数组构建图形?

Dak*_*est 8 arrays algorithm graph

我正在尝试学习图结构和算法。从概念上讲,我理解 DFS、BFS,并且我可以通过提供图形来实现它们,但是传统上图形是如何组成的?

通常,我将它们视为以边为指针的节点列表、带有它们连接的节点的边列表或二维矩阵,其中 arr[node_a][node_b] 的交集是边的权重。

当涉及到从输入中实际构建它时,我不知道从哪里开始。

例如,当提供像(在线吃豆子问题)这样的 2d 网格时,您将如何构建图形,其中 P 是源节点,- 是树中的节点。

%%%%%%%%%%%%%%%%%%%%
%--------------%---%
%-%%-%%-%%-%%-%%-%-%
%--------P-------%-%
%%%%%%%%%%%%%%%%%%-%
%.-----------------%
%%%%%%%%%%%%%%%%%%%%
Run Code Online (Sandbox Code Playgroud)

或者,当提供邻接列表时,您将如何构建它?

我知道这可能是一个大问题,因为这个主题相当复杂。对文档的链接表示赞赏!我一直无法从介绍级别找到任何内容。

mat*_*ich 2

图形通常使用两种数据结构之一来存储:

  1. 邻接列表(http://en.wikipedia.org/wiki/Adjacency_list

  2. 邻接矩阵(http://en.wikipedia.org/wiki/Adjacency_matrix

每个人都有自己的空间和时间优势。

您必须将想要表示为图形的任何输入(例如,解析它)转换为上述数据结构之一。