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源代码和文档。