邻接列表的Java实现

时间:2013-02-09 01:08:56

标签: java adjacency-list

我有一个n * m矩阵,每个节点都有一个整数值,并且它是一个无向图。我想为它建立一个邻接列表。我怎么做?任何帮助深表感谢。

2 个答案:

答案 0 :(得分:4)

这是一个创建邻接列表的简单实现。根据问题:

每个可变大小都会有n个链表。

首先初始化链接整数列表的ArrayList:

ArrayList<LinkedList<Integer>> adj_list = new ArrayList<LinkedList<Integer>>();

然后只需重复以下代码即可添加链接列表:

adj_list.add(new LinkedList<Integer>());

如果您使用它来表示图形,那么没有链接列表=没有顶点。所以你必须重复上面的行n(没有顶点)次。

现在假设您要将数字3,4,5添加到您的第一个链接列表中。请执行以下操作:

adj_list.get(0).add(3);
adj_list.get(0).add(4);
adj_list.get(0).add(5);

它只是意味着图表中有一个从顶点0到3,4,5的边缘。

答案 1 :(得分:2)

首先,除了m n之外,您的描述似乎是一个邻接矩阵。邻接矩阵总是正方形,因此我们必须假设m==n。矩阵元素是边权重。

图的邻接列表表示(通常)是成对的数组adj。集合adj[i]包含对<j, w>,如果存在有向边i--w-->j,即从顶点ij,其中权重为w曲线图。

通过这个定义,很明显你必须从n空的邻接集adj[i]开始,然后迭代矩阵元素m[i][j] = w。对于其中的每一项,请将<j, w>添加到adj[i]

这个的java代码非常简单,所以我不会写它。用邻接列表表示的图的类型类似于ArrayList<HashMap<Integer, Integer>> adjacencies。对<j,w> in adj[i]是存储在哈希表j -> w中的映射adjacencies.get(i)。创建这种邻接的代码将是adjacencies.get(i).put(j, w)

此方法允许您通过迭代哈希表i中的键来迭代adjacencies.get(i)附近的顶点,使用{{1}查找给定边i--w-->j的权重对于所有常见的图形操作,等等。