【发布时间】:2013-01-26 13:14:42
【问题描述】:
我想实现一些图形算法,这就是我创建一种图形框架的原因。到目前为止,我使用以下类非常轻松地实现了有向图;
class Vertex {
String id;
String name;
}
class Edge {
String id;
Vertex source;
Vertex destination;
int weight;
}
class Graph {
List<Vertex> vertexes;
List<Edge> edges; }
在测试时我创建:
Edge edge = new Edge(id, source_node, destination_node, weight)
这在有向图中非常好。但是在无向图中; 我必须这样写; 假设我们有 2 个节点,它们是 A,B,它们之间的权重是 10。所以由于无向图的结构,我必须放置两条边;
Edge e1 = new Edge(id1, A, B, 10)
Edge e2 = new Edge(id2, B, A, 10)
这种类型的边缘创建既低效又费力。
因此,我如何修改我的代码,以便不必在无向图的两个节点之间放置两条边。 将无向图类型也集成到我的代码中的最佳方法是什么?
感谢您的宝贵时间。
【问题讨论】:
-
为什么不将
Edge类拆分为两个:UndirectedEdge和DirectedEdge,它们也可以从一个名为Edge的基类extend -
除了您将其命名为源/目标之外,您的 Edge 类中没有任何内容表明它是有向边。
-
有向图和无向图的区别在于你如何解释它。
标签: java algorithm graph-algorithm