我正在做一些关于图形的研究,因为它不完全是我的研究领域,我认为我的想法错了,代码:
public class Vertex { // Nothing really new here... private String label;
public Vertex(String pageObject) {
this.label = pageObject;
}
// blabla.
} 我认为这是我开始出错的地方:
public class Edge { private String source; //Source? if it's bidirectional It's not supposed to have a source, or am I wrong? Like it's source looking from the starting point? private int weight; private String destination; //Same thing here.
public Edge(String source, int weight, String destination) {
this.source = source;
this.weight = weight;
this.destination = destination;
}
} 在这里我失败了:
public class Graph { // Really struggling to represent it here. private Map<Vertex, List
> adjVertices; } // I think the wrong idea about the graph above may lead to results like this below, and it seems wrong, like Earth being the key, and also the source... // Just an example: {
"Earth":{
"source":"Earth", "weight":150, "destination":"Jupiter" } } 几乎每个例子都与有向图有关,所以我需要了解如何纠正或从零开始。
有许多不同的方法来表示顶点,边和图。这是一个过于简化的:
定义方向边:
class Edge {
private Vertex to;
private int weight;
public Edge(Vertex to, int weight) {
super();
this.to = to;
this.weight = weight;
}
Vertex getTo() {
return to;
}
int getWeight() {
return weight;
}
//todo override hashCode()
} 定义一个顶点,以便每个顶点都有一个Edges 的集合到它的:
class Vertex {
private String label;
private Set<Edge> edges; //collection of edges to neighbors
public Vertex(String pageObject) {
this.label = pageObject;
edges = new HashSet<>();
}
String getLabel() {
return label;
}
boolean addEdge(Edge edge){
return edges.add(edge);
}
List<Edge> getEdges() {
return new ArrayList<>(edges);
}
//todo override hashCode()
} 定义一个包含Vertex对象集合的Graph:
class Graph{
private Set<Vertex> vertices; //collection of all verices
public Graph() {
vertices = new HashSet<>();
}
List<Vertex> getVertices() {
return new ArrayList<>(vertices);
}
boolean addVertex(Vertex vertex){
return vertices.add(vertex);
}
} 构建图表:
public static void main(String[] args) {
Graph graph = new Graph();
//construct vertices
Vertex v1 = new Vertex("1");
Vertex v2 = new Vertex("2");
Vertex v3 = new Vertex("3");
Vertex v4 = new Vertex("4");
Vertex v5 = new Vertex("5");
v1.addEdge(new Edge(v2, 1)); //connect v1 v2
v2.addEdge(new Edge(v1, 1));
v2.addEdge(new Edge(v3, 2)); //connect v2 v3
v3.addEdge(new Edge(v2, 2));
v2.addEdge(new Edge(v4, 3)); //connect v2 v4
v4.addEdge(new Edge(v2, 3));
v4.addEdge(new Edge(v5, 1)); //connect v4 v5
v5.addEdge(new Edge(v4, 1));
graph.addVertex(v1); graph.addVertex(v2); graph.addVertex(v3);
graph.addVertex(v4); graph.addVertex(v5);
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。