一旦绘制了图形,如何创建邻接列表?

时间:2012-07-18 17:35:32

标签: java graph dijkstra adjacency-list adjacency-matrix

我有一个Edge类,它存储:source(顶点),target(顶点)和weight。

我有一个Vertex类,它存储:name,x-coordinates,y-coordinates和Edge [] adjacentList。

我还有一个Graph类,它存储两个ArrayLists:edge和vertices。

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

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

谢谢。

3 个答案:

答案 0 :(得分:1)

我会创建一个.either方法(将Edge作为参数并返回Vertex)和.other方法(采用Vertex并返回其Edge的另一个Vertex)。迭代Graph类中的边列表。对于每个边缘,调用。要么获得一个顶点,将其存储在某个变量中,我们称之为v1。现在调用.other来获取另一个Vertex,称之为v2。

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

答案 1 :(得分:1)

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

现在将边添加到任何顶点的邻接列表中:

  

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

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

假设Vertex的实例是v1,即顶点A然后是v1.adjacentList[index]=e1;

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

答案 2 :(得分:1)

有一些实现图表的方法:

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