开发者社区> 问答> 正文

如何在java中表示无向加权图

我正在做一些关于图形的研究,因为它不完全是我的研究领域,我认为我的想法错了,代码:

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" } } 几乎每个例子都与有向图有关,所以我需要了解如何纠正或从零开始。

展开
收起
小六码奴 2019-08-17 17:44:23 2404 0
1 条回答
写回答
取消 提交回答
  • 有许多不同的方法来表示顶点,边和图。这是一个过于简化的:

    定义方向边:

    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);  
    

    }

    2019-08-17 17:45:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Java Your(Next) 立即下载
Java基础入门(一) 立即下载
Java 8 简明教程 立即下载