Java图形实现的帮助

Java图形实现的帮助,java,graph,Java,Graph,我必须编写一个程序,将垂直图形存储到图形中,并将它们连接起来。程序的输入如下所示: Plot 3 5 to 5 8 Plot 6 1 to 3 5 etc 根据这个输入,我将存储(3,5)的vertix,这是x和y坐标。然后我必须将此坐标连接到(5,8) 我的问题是,如何实现这个图?我在想,我需要将Vertix存储在arraylist或map中,并将边也保存在列表中……但由于我没有得到图形的实际最大大小,我在整体实现中有点迷失了方向。基本上,如果你们能给我一个如何开始的想法,那就太好了。你们可

我必须编写一个程序,将垂直图形存储到图形中,并将它们连接起来。程序的输入如下所示:

Plot 3 5 to 5 8
Plot 6 1 to 3 5
etc
根据这个输入,我将存储
(3,5)
的vertix,这是
x
y
坐标。然后我必须将此坐标连接到
(5,8)


我的问题是,如何实现这个图?我在想,我需要将Vertix存储在arraylist或map中,并将边也保存在列表中……但由于我没有得到图形的实际最大大小,我在整体实现中有点迷失了方向。基本上,如果你们能给我一个如何开始的想法,那就太好了。

你们可以使用一个已经制作好的库来实现这一点。

思考图形的一个简单方法是将它们分解为节点和边组件。(注意:你称之为顶点的东西我称之为节点。足够近。)

让我们考虑以下选项:

// 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;
}
//选项1
类节点{
V数据;
设置边缘;
//如果是有向图,则需要:
//设置边缘通道;
}
//选择2
类节点{
V数据;
设置边缘;
//如果是有向图,则需要:
//设置边缘通道;
}
阶级边缘{
节点源;
节点目的地;
}
现在,图形只不过是:

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

// option 2
class Graph<V> {
    Set<Node<V>> nodes;
    Set<Edge<V>> edges;
}
//选项1
类图{
设置节点;
}
//选择2
类图{
设置节点;
设置边缘;
}
选项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 = ...
class-SomeObject{
字符串数据;
int x;
int-y;
公共布尔等于(对象o){
if(某个对象的o实例){
SomeObject so=(SomeObject)o;
返回so.x==x&&so.y==y;
}
返回false;
}
公共int hashCode(){
返回x*100+y;//它工作……足够近:)
}
}
//稍后的某个地方:
图形=。。。

至于你想要什么功能,你需要一个更完整的列表。但是,这将帮助您更好地理解如何实现图形。

如果这是家庭作业,您应该添加标记通常这是学校作业,以帮助教授算法和数据结构的基础知识……是的,在这种情况下,您的答案更有用(+1)。OP还可以查看JDSL源代码和文档。