邻接表的Java实现
我有一个n*m矩阵,每个节点都有整数值,它是一个无向图。我想为它建立一个邻接列表。我该怎么做?非常感谢您的帮助 首先,你的描述似乎是一个邻接矩阵,除了你说的邻接表的Java实现,java,adjacency-list,Java,Adjacency List,我有一个n*m矩阵,每个节点都有整数值,它是一个无向图。我想为它建立一个邻接列表。我该怎么做?非常感谢您的帮助 首先,你的描述似乎是一个邻接矩阵,除了你说的mbyn。邻接矩阵总是平方的,所以我们必须假设m==n。矩阵元素是边权重 图的邻接列表表示(通常)是成对集合的数组adj。集合adj[i]包含一对当有一条有向边i--w-->j时,即在所表示的图中从顶点i到j,权重w 有了这个定义,很明显您必须从n空邻接集adj[i]开始,然后迭代矩阵元素m[i][j]=w。对于每一项,将添加到adj[i]
m
byn
。邻接矩阵总是平方的,所以我们必须假设m==n
。矩阵元素是边权重
图的邻接列表表示(通常)是成对集合的数组adj
。集合adj[i]
包含一对
当有一条有向边i--w-->j
时,即在所表示的图中从顶点i
到j
,权重w
有了这个定义,很明显您必须从n
空邻接集adj[i]
开始,然后迭代矩阵元素m[i][j]=w
。对于每一项,将
添加到adj[i]
这方面的java代码非常简单,因此我不会编写它。用邻接列表表示的图的类型类似于ArrayList邻接
。adj[i]中的对是存储在哈希表adjaccences.get(i)
中的映射j->w
。创建这种邻接的代码将是adjaccines.get(i).put(j,w)
此方法允许您通过迭代哈希表中的键来迭代与i
相邻的顶点。get(i)
,使用w=adjaccess.get(i).get(j)
查找给定边的权重,依此类推所有常用的图形操作 下面是一个创建邻接列表的简单实现。根据问题:
将有n个链表,每个链表的大小可变
首先初始化整数链表的ArrayList:
ArrayList<LinkedList<Integer>> adj_list = new ArrayList<LinkedList<Integer>>();
这仅仅意味着你的图中有一条从顶点0到3,4,5的边。你试过什么吗?2d数组?你是指邻接矩阵?你想要一个每个位置都是相似列表的数组吗?是的,如果原始矩阵中的整数表示边指向的节点的索引,那么就完成了
int[][]
,其中第一个索引是节点的索引,存储在那里的值是目标节点。如果拓扑是固定的,这是足够的,如果不是,你可以考虑使用列表的一些实现。这完全没有研究。单独列出了三种可能的实现方法。Hi Gene,包含我要为其构建邻接矩阵的数据的数组是m*n,其中m=n、 你的图形有多少个顶点<代码>n或m
?邻接矩阵应该是一个方阵。如果你有nxm
矩阵,你肯定缺少了一些边。ShivaKumar完全正确。如果@Jw123使用的是矩形矩阵,那么它是图形的某种非标准表示,在任何人能够帮助您之前,您必须解释矩阵中的每个元素表示什么。获得一个好答案的秘诀就是总是问一个好问题。如果我们想要一个加权图,我们应该怎么做?@MasterYushi在这里我找到了一个使用javafx.util.Pair
的图中加权边的例子:
adj_list.add(new LinkedList<Integer>());
adj_list.get(0).add(3);
adj_list.get(0).add(4);
adj_list.get(0).add(5);