我有一个n * m矩阵,每个节点都有一个整数值,并且它是一个无向图。我想为它建立一个邻接列表。我怎么做?任何帮助深表感谢。
答案 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
,即从顶点i
到j
,其中权重为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
的权重对于所有常见的图形操作,等等。