我刚开始使用图形,我正在尝试建立一个使用城市的邻接列表。这两个城市被发送到addRelations方法中。我试着说,如果已经没有一个顶点与第一个或最后一个字符串匹配,就用还不存在的字符串创建一个新顶点。现在,我得到的只是一个空指针异常在行的*。有没有人知道我做错了什么或者我应该做什么?
public class AdjList {
public class Node{
int num;
Node next;
Node(int num, Node next){
this.num=num;
this.next=next;
}
}
public class Vertex{
String city;
Node list;
Vertex(String city, Node next){
this.city=city;
this.list=next;
}
}
Vertex [] aList= new Vertex [50];
void addRelation(String from, String to) {
for(int i=0; i<aList.length; i++){
****if(!aList[i].city.equals(from)){****
aList[i]=new Vertex(from, null);
}
if(aList[i].city.equals(from)){
aList[i]=new Vertex(from, null);
}
}
}
主:
public static void main(String args[]) {
AdjList g = new AdjList ();
g.addRelation("Atlanta", "Chattanooga");
g.addRelation("Chattanooga", "Nashville");
g.addRelation("Chattanooga", "Knoxville");
g.addRelation("Atlanta", "Birmingham");
g.addRelation("Greenville", "Knoxville");
}
在您编写的代码行中
Vertex [] aList= new Vertex [50];
这只是为您分配了足够的空间,使您可以容纳最多50个vertex
项。但是,这并不意味着数组将在分配后立即被它们填充。因此您基本上可以存储50个vertex
项。
在您的方法addrelation
中,它正在检查!list[i].city.equals(from)
,但是list
数组没有任何实际的vertex
对象,因此当您试图从list[i]
查询city
字段时,您实际上是试图查询一个空对象,因此出现空指针异常。
对此有两种变通方法。
顶点
对象填充数组。虚拟方法要求您使用空字符串/空参数作为构造函数参数来初始化对象,或者您可以实现默认构造函数,只说new Vertex()
,然后在代码逻辑中自定义Vertex
对象的city
和next
字段。
这个 邻接列表 模式是一种常见的关系模式,通过该模式,表包含对其自身的外键引用,换言之,是 自指关系 。这是在平面表格中表示分层数据的最常见方式。其他方法包括 嵌套集 ,有时称为“修改的预购”,以及 物化路径 。尽管在评估SQL查询内的流畅性时,修改的预排序很有吸引力,但由于并发性、降低复杂性的原因,邻接列表模型可能是最适合大多数分层存储需求的模式,而且与可以将子树完全加载到应用程序空间的应用程序
`使用命名空间标准;
作为一项练习,我必须建立一个卫星导航系统,规划从一个位置到另一个位置的最短和最快路线。它必须尽可能快,而不需要使用太多内存。 我很难决定使用哪种结构来表示图形。我知道矩阵更适合密集图,列表更适合稀疏图。我更倾向于使用列表,因为我认为添加顶点将是这个程序中最累人的部分。 我只是想听听你们的意见。如果我把一个典型的路线图看作一个图形,其中不同的位置是节点,道路是边缘。你认为它是稀疏的还是密集的?在这种
实现稀疏连接图的更空间高效的方法是使用邻接表。在邻接表实现中,我们保存Graph 对象中的所有顶点的主列表,然后图中的每个顶点对象维护连接到的其他顶点的列表。 在我们的顶点类的实现中,我们将使用字典而不是列表,其中字典键是顶点,值是权重。 Figure 4 展示了 Figure 2中的图的邻接列表示。 Figure 4 邻接表实现的优点是它允许我们紧凑地表示稀疏图。 邻接表还允许我们容易找到直接连
我遇到了一个将Dijkstras算法的伪代码转换为实际代码的问题。我给出了邻接列表,如“位置-相邻位置-到位置的距离”,一个节点的例子:AAA AAC 180 AAD 242 AAH 40。我的任务是读取一个按邻接列表组织的文件,并计算从一个节点到另一个节点的最短路径。下面是Dijkstra伪代码: 我遇到的最大的麻烦是“对于与v相邻的每个顶点w”这一行,这里是我的非工作代码: 使用我的顶点类,我
给定单链接列表: