2011-09-07 63 views
1

我必须编写一个程序,将verticies存储到一个图形中并将它们连接起来。该方案的输入被给定为:Java图形执行帮助

Plot 3 5 to 5 8 
Plot 6 1 to 3 5 
etc 

从此输入,我将存储的(3,5)一个vertix这是xy坐标。然后我必须将此坐标连接到(5,8)

我的问题是,我将如何去执行此图?我想我需要将顶点存储在一个数组列表或地图中,并将边缘保存在一个列表中,但由于我没有给出图的实际最大尺寸,所以我有点迷路了在整体实施中。基本上,如果你们可以给我一个想法如何开始,这将是甜蜜的。

+0

如果这是家庭作业,你应该添加[标签:功课]标签 – corsiKa

+0

@glowcoder,是NP – wnnnnn

回答

0

您可以使用一个已经取得像库为JDSL

+0

通常,这是一所学校的分配,以帮助教的算法和数据结构的基本原则...... – corsiKa

+0

烨你的答案在这种情况下更有用(+1)。 OP还可以看看JDSL的来源和文档。 – 2011-09-07 06:09:59

3

一个简单的方法来思考的图表是打破他们到他们的节点和边缘部分。 (注:你所谓的顶点我称之为一个节点足够关闭。)

让我们考虑以下选项:

// Option 1 
class Node<V> { 
    V data; 
    Set<Node<V>> edges; 
    // if it were a directed graph, you'd need: 
    // Set<Node<V>> edgesAway; 
} 

// Option 2 
class Node<V> { 
    V data; 
    Set<Edge<V>> edges; 
    // if it were a directed graph, you'd need: 
    // Set<Edge<V>> edgesAway; 
} 

class Edge<V> { 
    Node<V> source; 
    Node<V> destination; 
} 

现在的图形无非是:

// option 1 
class Graph<V> { 
    Set<Node<V>> nodes; 
} 

// option 2 
class Graph<V> { 
    Set<Node<V>> nodes; 
    Set<Edge<V>> edges; 
} 

选项1是最简单和最容易实现的。选项2为您提供了更多的灵活性,例如为边缘值添加权重。

现在,您在这些节点上有一些数据,对不对?现在,让我们把数据作为坐标的字符串表示。

class SomeObject { 
    String data; 
    int x; 
    int y; 

    public boolean equals(Object o) { 
     if(o instanceof SomeObject) { 
      SomeObject so = (SomeObject)o; 
      return so.x == x && so.y == y; 
     } 
     return false; 
    } 

    public int hashCode() { 
     return x * 100 + y; // it works... close enough :) 
    } 
} 

// somewhere later: 
Graph<SomeObject> graph = ... 

现在至于你想要什么功能,你需要一个更完整的列表。但是这应该让你理解如何实现一个图表。