2011-04-11 91 views
2

我想要创建一个有向图,我有三个变量:字符串X,Y,Z 和第一顶点含有3个变量和下包含在接下来的3直到循环创建有向图

的端部

我有这样的:

BufferedReader reader = new BufferedReader(
    new StringReader(contentTextArea.getText())); 

try { 
    str =reader.readLine(); 

    while(str != null) { 
    String splitted[] = str.split("\\|"); 
    String x = splitted[0].trim(); 
    String y = splitted[1].trim(); 
    String z = splitted[2].trim(); 
    }   
} 

所以这段代码给我每次3串,我想,每次以创建顶点和边缘,这将创造在最后的图表。 的代码可能是这样的,但我不知道该写什么 createVertex (String x,y,z),addEdge()方法。

public class graph { 
    createVertex (String x,y,z); 
    addEdge(); 
} 
+1

你需要一个实现(数据结构等)来保存图形信息。取决于你需要什么样的操作,你应该选择正确的实现(结构) – Winfred 2011-04-11 08:31:20

+0

你能解释更多 – fayza 2011-04-11 08:34:16

+1

除了Winfred的说法,我认为你应该重新考虑你的输入形式。你每次创造“顶点和边缘”? (1)创建一个不具有相同顶点数和边数的图时,你会做什么? (2)在第一行,你的边缘要加入哪两个顶点? - 哦,你的'createVertex'和'addEdge'的签名对我来说没有多大意义。用于'createVertex'的三个字符串?他们是为了什么?没有参数给'addEdge'?那么它应该添加什么优势呢? – 2011-04-11 08:35:06

回答

0

如果要创建一个linestrip,即,每个行表示一个顶点和边缘是由可以创建两个连续的顶点形成/使用表示一个顶点和一个Edge类,它具有一参考一个Vertex类形成其终点的2个顶点。

在你的图类中,你可以只有一个顶点列表和一个边缘列表。 createVertex()然后可以只添加一个新的顶点到列表中,而addEdge()会使用列表中的最后两个顶点(如果至少有两个顶点!)创建一个边,并将边放在边线列表上。

如果以后有由特定顶点形成的边(即不是最后两个),可以使用列表中每个顶点的索引引用它们并通过这些索引定义边(即,顶点0的边到5可以被定义为0,5)。

0

这真的取决于你如何代表你的图。我会推荐使用第三方库,如JGraphJGraphT。如果你不能使用第三方库(例如作业或者你只是想学习),那么你需要定义你自己的Graph类。

两个常见的表示是连接矩阵和邻接表。这两种表示方式都可以适用于您。

创建一个新的顶点很简单,只需在JGraph图上调用addVertex即可。这将返回一个顶点对象。您需要为它提供两个参数,一个名称和一个数据对象。对于名称,可以使用递增的id号码或原始的线路字符串。然后,您需要从三个字符串中创建一个数据对象,从而为我提供一个自定义数据对象。

我会跟踪插入的最后一个节点(从null开始),然后在前面的i不为空时在顶点之间创建边。确保每次迭代更新前一个顶点。

+0

我使用JGraph库 – fayza 2011-04-11 08:56:26

+0

addEdge位于两个连续的顶点之间 – fayza 2011-04-11 08:58:07