Java中的邻接矩阵

我对图表和邻接矩阵感到困惑。 我正在为一个类做一个任务,我有一个节点的文本文件和一个边缘的文本文件,我必须阅读它们中的每一个并使它们成为一个图形,我可以在其上执行操作,例如确定图形是否为连接,找到最小的生成树,遍历和查找路径。 我之前从未使用过图表,而且我对整个事情感到困惑,我想知道是否有人可以帮我解释一下。

首先,我自己构建一个图形(可能是节点和边类?)然后从中构造一个邻接矩阵? 或者邻接矩阵本身就是图形?

然后我对如何在程序中实现相邻矩阵感到困惑。 节点的名称是“ND5”和“NR7”,所以我必须设置和读取[ND5] [NR7]的边缘,但我不知道如何设置像这样的2d数组的字符串外面和里面的数字。

我一直在互联网上搜索并阅读我教科书中关于图表的整章,我真的不明白设置这个图表的第一步基本步骤。 我非常感谢你的帮助。 谢谢。

首先,我自己构建一个图形(可能是节点和边类?)然后从中构造一个邻接矩阵? 或者邻接矩阵本身就是图形?

如果没有真正阅读你的作业说明,任何人都无法肯定地回答这个问题。 但是,除非赋值具体提到NodeEdge类或其他东西,我的猜测是你应该使用邻接矩阵来表示你的图。

然后我对如何在程序中实现相邻矩阵感到困惑。 节点的名称是“ND5”和“NR7”,所以我必须设置和读取[ND5][NR7]的边缘,但我不知道如何设置像这样的2d数组的字符串外面和里面的数字。

我完全可以理解你的困惑。 您真正想要做的是在节点名称和矩阵的索引之间创建一个双射 (一对一的关系)。 例如,如果图中有n个节点,则需要一个n×n矩阵(即new boolean[n][n] ),并且每个节点都对应一个0到n范围内的整数(不包括n)。

我不确定你的类到目前为止所覆盖的数据结构,但最简单的方法可能是使用Map ,它可以让你查找"ND5"这样的名字并获取一个整数(索引)。

另一个不错的选择可能是使用数组。 您可以将所有节点名称放入一个数组中,使用Arrays.sort对其进行Arrays.sort ,然后在对其进行排序后,可以使用Arrays.binarySearch查找该数组中特定节点名称的索引。 我认为这个解决方案实际上比使用Map更好,因为它允许您以两种方式进行查找。 您使用Arrays.binarySearch进行名称到索引的查找,您只需索引到数组以进行索引到名称查找。


示例:假设我们有此图:

A-B,A-D,B-D,C-D

鉴于该图,这里有一些示例代码,说明如何执行此操作:(警告!它未经测试)

 import java.util.Arrays; // Add all your node names to an array String[] nameLookup = new String[4]; nameLookup[0] = "A"; nameLookup[1] = "B"; nameLookup[2] = "C"; nameLookup[3] = "D"; // Our array is already properly sorted, // but yours might not be, so you should sort it. // (if it's not sorted then binarySearch won't work) Arrays.sort(nameLookup); // I'm assuming your edges are unweighted, so I use boolean. // If you have weighted edges you should use int or double. // true => connected, false => not connected // (entries in boolean arrays default to false) boolean[][] matrix = new boolean[4]; for (int i=0; i 
    Interesting Posts