0

我有一个 Edge 类,它存储:源(顶点)、目标(顶点)和权重。

我有一个 Vertex 类,它存储:名称、x 坐标、y 坐标和 Ed​​ge[] 相邻列表。

我还有一个 Graph 类,它存储两个 ArrayList:边和顶点。

当前,当绘制顶点/节点和边时,它会分别自动添加到顶点和边列表中。

现在我想使用这两个数组列表填充 Edge[] 相邻列表,但我不知道该怎么做。如果有人能给我指点或概述代码的外观,我将不胜感激。

谢谢你。

4

3 回答 3

1

我将创建一个 .either 方法(将 Edge 作为参数并返回任一 Vertex)和一个 .other 方法(它采用 Vertex 并返回其 Edge 的另一个 Vertex)。遍历 Graph 类中的边列表。对于每条边,调用 .either 来获取一个 Vertex,将其存储在某个变量中,我们称之为 v1。现在调用 .other 来获取另一个 Vertex,称之为 v2。

将 v1、v2 组合添加到 v1 的 Edge[] 和 v2 的 Edge[]。

于 2012-07-18T18:47:20.393 回答
1

首先,您的代码中存在冗余。Edge 类不需要包含源顶点,因为您将该边存储到 Vertex 类中,因此显然该顶点将是源。

现在向任何顶点的邻接列表添加一条边:

假设您有两个顶点:A 和 B。其中 A 是源顶点,B 是目标顶点。要创建一条边,只需创建一个 Edge 类的实例(显然定义了一个构造函数)并将其添加到顶点 A 的邻接列表中。

Edge e1= new Edge('B' , weightofedge);

假设 Vertex 的实例是 v1 即 Vertex A 那么v1.adjacentList[index]=e1;

或者你也可以在一行中完成。

于 2012-07-18T19:41:40.117 回答
1

有一些实现 Graph 的方法:

您可以拥有 Vertex 类,其中每个实例都包含包含其邻居的 ArrayList,或者您可以拥有 bool |V|X|V| 如果 Matrix[i][j] 为真,则表示您已将边从顶点 i 定向到顶点 j。

于 2012-07-18T19:48:59.723 回答