当前位置: 首页 > 知识库问答 >
问题:

用邻接表java实现图形

狄旻
2023-03-14

对于许多点,我有2D的协定子,例如点a=x,y

我想做一个图的实现使用邻接列表列表和连接某些点的无方向图在最有效的方式(不使用地图或哈希表)

共有1个答案

方河
2023-03-14

您可以尝试这种无向图的嵌入

public class Graph {

    private static final String NEW_LINE = System.lineSeparator();

    private final int vertices;
    private int edges;
    private List<Integer>[] adj;

    public Graph(int v) {
        if (v < 0)
            throw new IllegalArgumentException("Number of vertices must be non-negative");
        this.vertices = v;
        this.edges = 0;
        adj = (List<Integer>[]) new LinkedList[v];
        for (int i = 0; i < v; i++) {
            adj[v] = new LinkedList<Integer>();
        }
    }

    public int getVertices() {
        return vertices;
    }

    public int getEdges() {
        return edges;
    }

    public void addEdge(int v, int w) {
        adj[v].add(w);
        adj[w].add(v);
        edges++;
    }

    public int degree(int v) {
        return adj[v].size();
    }

    public Iterable<Integer> adj(int v) {
        return adj[v];
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        for (int v = 0; v < vertices; v++) {
            builder.append(v + ": ");
            for (int w : adj[v]) {
                builder.append(w + " ");
            }
            builder.append(NEW_LINE);
        }
        return builder.toString();
    }
}

 类似资料:
  • 我正在学习技术面试和图表对我来说有点困难。我对邻接矩阵很容易,但对邻接列表的实现很困惑。 问题是我在网上看到的邻接列表的大多数实现(Example1、Example2和Example3)根本不使用节点。他们只是使用一个由int和linkedlists组成的HashMap。这是正确的吗?因为定义(维基百科)说它由顶点或节点组成。此外,大多数使用邻接矩阵的图的实现都使用节点,而不是INT。例4。我是不

  • 本文向大家介绍C++实现图的邻接矩阵表示,包括了C++实现图的邻接矩阵表示的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现图的邻接矩阵表示代码,供大家参考,具体内容如下 1.遇到的问题:教材中写着子类Graphmtx(我用GrapMatrix)继承基类Graph 但是我在子类GraphMatrix中使用父类Graph的保护成员属性:maxVertices 显示没有声明(如下

  • 我是DSA的初学者,最近几天我一直在尝试使用邻接列表找到图形的正确实现。 下面我给出了我认为邻接列表是如何实现的整个代码。 我从头开始创建了一个SiinglyLinkedlist。并且我正在使用一个Hashmap来改进时间复杂性。 Hashmap中的整数键充当顶点&在其值中包含一个Linkedlist。 在顶点中,我存储了整数ID,在Linkedlist中,我存储了该ID的所有好友名。 图中有3种

  • 在斯坦福的一门算法课程中,教授为图的邻接表表示列出了以下成分: 顶点数组或列表 边的数组或列表 顶点列表中的每个顶点都指向其上的边。 边列表中的每个边都指向其边点。 这种表示法与图形的“关联表”表示法相同吗?如果是,为什么本文认为“邻接表”和“发生率表”是分开的?

  • 在书中,他们做过这样的宣示: 我应该如何将下面图的输入作为邻接表并输出它的邻接表表示?假设,edge的每个成本是10。

  • 作为一项练习,我必须建立一个卫星导航系统,规划从一个位置到另一个位置的最短和最快路线。它必须尽可能快,而不需要使用太多内存。 我很难决定使用哪种结构来表示图形。我知道矩阵更适合密集图,列表更适合稀疏图。我更倾向于使用列表,因为我认为添加顶点将是这个程序中最累人的部分。 我只是想听听你们的意见。如果我把一个典型的路线图看作一个图形,其中不同的位置是节点,道路是边缘。你认为它是稀疏的还是密集的?在这种