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

使用邻接列表实现的图的java-nodes vs int

田远
2023-03-14

我正在学习技术面试和图表对我来说有点困难。我对邻接矩阵很容易,但对邻接列表的实现很困惑。

问题是我在网上看到的邻接列表的大多数实现(Example1、Example2和Example3)根本不使用节点。他们只是使用一个由int和linkedlists组成的HashMap。这是正确的吗?因为定义(维基百科)说它由顶点或节点组成。此外,大多数使用邻接矩阵的图的实现都使用节点,而不是INT。例4。我是不是漏掉了什么?

// add edge from vertices v1 to v2
void addEdge(int v1,int v2){
adj.get(v1).add(v2);
}

那么例1,2,3中邻接列表的实现是错误的吗?如果他们是对的,那么如果我使用节点而不是int来实现邻接列表,会不会很糟糕呢?我不想让我的面试官认为我是个白痴

共有1个答案

储志业
2023-03-14

您可以直接使用Node(包含数据类型)或使用数据类型(在示例中为整数),它们都可以工作

但是,使用节点是一个更好的选择,原因有几个

>

  • 避免您正确提到的重复数据值问题
  • 使用节点更加面向对象。它允许Graph类使用节点持有的任何数据类型。这使得代码的可移植性更强,因为图形可以处理字符串、长、整数等。
  • 为了利用我上面提到的可移植性,应该像下面这样定义一个节点类

    class Node<T>{
        T data;
    }
    

    希望有帮助!

  •  类似资料:
    • 对于许多点,我有2D的协定子,例如点a=x,y 我想做一个图的实现使用邻接列表列表和连接某些点的无方向图在最有效的方式(不使用地图或哈希表)

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

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

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

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

    • 大家好:)今天我正在提高我在图论和数据结构方面的技能。我决定用C++做一个小项目,因为我已经有一段时间没有用C++了。 我想为一个有向图做一个邻接表。换句话说,看起来像: 这将是一个有向图,其中V0(顶点0)对V1和V3有一条边,V1对V2有一条边,V2对V4有一条边,如下所示: