Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
邻接表的Java实现_Java_Adjacency List - Fatal编程技术网

邻接表的Java实现

邻接表的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]

我有一个n*m矩阵,每个节点都有整数值,它是一个无向图。我想为它建立一个邻接列表。我该怎么做?非常感谢您的帮助

首先,你的描述似乎是一个邻接矩阵,除了你说的
m
by
n
。邻接矩阵总是平方的,所以我们必须假设
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);