Java实现邻接表无向图,总是报空指针异常 5C

import java.util.ArrayList;

public class ListUDG {

//节点类
class vNode {
    char data;
    //存储和data形成边的另一顶点索引的链表
    ArrayList<Integer> firstNode;
}

//创建存储节点数组
static vNode[] vertex = new vNode[200];

public ListUDG(char[] vex, char[][] edg) {

    //对节点的数组初始化
    for (int i = 0; i < vex.length; i++) {
        vertex[i] = new vNode();
        vertex[i].data = vex[i];
        vertex[i].firstNode = null;
    }

    //遍历边的集合,并将边的顶点加到vNode类的链表里
    for (int i = 0; i < edg.length; i++) {
        char c1 = edg[i][0];
        char c2 = edg[i][1];
        int p1 = getPosition(c1);
        int p2 = getPosition(c2);


        if (vertex[p1].firstNode == null) {

            vertex[p1].firstNode.add(0,p2);
        } else
            vertex[p1].firstNode.add(p2);

        if (vertex[p2].firstNode == null) {
            vertex[p2].firstNode.add(0,p1);
        } else
            vertex[p2].firstNode.add(p1);
    }
}

private int getPosition(char c) {
    for (int i = 0; i < vertex.length; i++)
        if (vertex[i].data == c)
            return i;
    return -1;
}

public static void main(String[] args) {
    char[] vexs = {'A', 'B', 'C', 'D', 'E', 'F', 'G','H','I','J','K'};
    char[][] edges = new char[][]{
            {'A', 'C'},
            {'A', 'D'},
            {'A', 'F'},
            {'B', 'C'},
            {'C', 'D'},
            {'E', 'G'},
            {'D', 'G'},
            {'I','J'},
            {'J','G'},};
    ListUDG lu = new ListUDG(vexs,edges);

    StringBuffer s = new StringBuffer();

    ///输出图
    for (int i = 0; i < vexs.length; i++) {
        s = null;
        s.append(vertex[i].data + " ");
        for (Integer num : vertex[i].firstNode)
            s.append(num.toString() + " ");
        System.out.println(s);
    }
}

}


0

2个回答

1
include_1
include_1 有木有看出来上面的代码哪里错了?
9 个月之前 回复

main函数最后的那个for循环里,将StringBuffer类型变量s设成了null

  ///输出图
     for (int i = 0; i < vexs.length; i++) {
          s = null; //错误代码
          s.append(vertex[i].data + " ");
         for (Integer num : vertex[i].firstNode)
           s.append(num.toString() + " ");
        System.out.println(s);
 }
0
include_1
include_1 应该删去吗?
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java:邻接表无向图的链表实现法
首先画出邻接表图:分析:    观察右边的邻接表可以发现,A~E每个顶点都有自己的编号,每个顶点又跟其他数组相关联。我们可以把所有的顶点看做一个数组,而与每个顶点相关联的其他顶点又是一个数组,那么整个邻接表就是一个二维数组。也可以看作是一个   List&amp;lt;ArrayList&amp;lt;T&amp;gt;&amp;gt;对象。代码实现:package my.graph; import java.util.Arr...
邻接表实现无向图的建立与遍历,最小生成树以及最短路径
使用邻接表来实现无向图的建立与遍历,同时给出prim算法求最小生成树以及krustra算法求最短路径.代码中给出了注释方便理解
无向图的邻接表广度优先算法
/*无向带权图的邻接表广度优先算法*/ #include<stdio.h> #define vnum 10 int visited[vnum]={0}; typedef struct arcnode { int adjvex; /*下一条边的顶点编号*/ struct arcnode * nextarc; /*指向下
邻接表无向图的创建和遍历(dfs)
网上找的一个图,对这个图进行dfs /************************************************************************* > File Name: adjlist.cpp > Author:gens_ukiy > Mail: > Created Time: 2016年11月29日 星期二 07时22
无向图的邻接表存储及输出
无向图的邻接表存储及输出无向图的邻接表存储及输出无向图的邻接表存储及输出
【数据结构】无向图:图的数据结构、遍历以及邻接表和邻接矩阵相互转换(1)
在只使用内置函数len和print的条件下,实现Python3中对无向图的创建以及遍历,以及邻接表和邻接矩阵的转换,用class来代替C中的structPS: 本文中的图均为无向图,转载需注明作者和出处。图的数据结构邻接表构建邻接表的每个结点的数据类型class Vertex(object): def __init__(self, data=None, n=None, first_edge...
数据结构带权无向图
广度优先遍历。深度优先遍历。带权无向图。最短路径。请输入定顶点对应的数字
C++邻接表实现无向图、有向图
/*********************邻接表实现有向图******************/ //邻接表实现有向图缺点:只有出度,没有入度;解决方法:逆邻接表、十字链表 //边节点类 template<class Type> class EdgeNode { public: int adjvex;//邻节点域,存储该节点对应的下标 //int weight;//用于存储权值,非
无向图邻接表的深度优先遍历
#include #include #define Max 50 int visited[Max]; //边表节点 typedef struct EdgeNode { int adjvex;//储存对应顶点的下标 int weight;//用于储存权值 struct EdgeNode * p;//指向下一个边表节点 }EdgeNode;
C++邻接表与无向图
C++邻接表与无向图参考《算法》,采用邻接表实现图结构,实现DFS以及BFS等算法。具体原理参考书本,此处给出C++版本实现。#include<iostream> #include<queue> #include<algorithm> #include<map>using namespace std;/* 顶点 中间节点 VNode ENode 0 | A --> 2(C)
无向图 邻接表 建立
还要继续建 有向图的 表表 ~~~
邻接矩阵实现图的广搜和深搜(java模板)
经常要用到,放到这里备用!! [code=&quot;java&quot;]//邻接矩阵实现图的广搜和深搜 import java.util.*; public class Graph { private int[][] G;//邻接矩阵 private int k;//顶点数目 private boolean[] visited;//判断顶点是否被访问过 publi...
无向图邻接表实现
图是由一组顶点和一组能够将两个顶点相连的边组成,使用邻接表来组建,即使用一个背包数组来实现。节点由0带V-1组成,节点数为V,边数为E. API: public class Graph Graph(int V) 创建一个含有V个顶点但不含边的无向图 int V() ...
邻接表实现无向图的深度和广度遍历
/*/* DFS深度优先遍历邻接表 */ #include &amp;lt;iostream&amp;gt; #include &amp;lt;malloc.h&amp;gt; using namespace std; #define MAX 20 typedef struct e_node//表节点 { int vex;//索引值 struct e_node *next; }*enode; typedef ...
kruskal算法 求最小生成树(邻接表 无向图) C实现
kruskal 路径压缩 按秩归并
无向图邻接表
#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #define MAX_POINT_NUM 10 //最大顶点数 /* 图存储方法: 1.邻接矩阵(有向图) 2.邻接表 3.多重邻接表 3.十字交叉链表(有向图) */ //下面是无向图邻接表的实现的方法 //邻接节点类型 typedef struct arcnode { i...
C++数据结构-有向图无向图的邻接表创建
#include &amp;lt;iostream&amp;gt; #define MAXVEX 4 //起始顶点数默认为6,可在此直接修改 #define MAXEDGE 5 //起始边的数默认为5,可在此直接修改 using namespace std; //该代码是无向图的邻接表 //注意点1:下标0的位置都不用,所以要多开辟一个空间 //注意点2:头结点信息既可以是字符A,B,C,D,...
无向图的邻接表遍历:深度优先搜索+广度优先搜索
#include &amp;lt;iostream&amp;gt; #include &amp;lt;malloc.h&amp;gt; #include &amp;lt;queue&amp;gt; #define NumVertex 20 bool visited[NumVertex]; using namespace std; typedef struct node{ int adjvex; node *next; }...
邻接表或者邻接矩阵为存储结构实现连通无向图的深度优先和广度优先遍历
程序设计任务: 设计一个程序,实现以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。基本要求:以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。测试数据:教科书p168图7.13(a)。
邻接表表示图(有向、无向图)及广度、深度遍历)
无向图的邻接矩阵和邻接表实现各种操作 -- C++语言描述
一:实现代码 #ifndef _GRAPH_H #define _GRAPH_H #include #include using namespace::std; /////////////////////////////////////////////////////////////////////////////////////////// //通用图结构 template
无向图的广度优先遍历和深度优先遍历
public class MGraph { private char[] vexs;// 顶点 private int[][] edge;// 存储边的二维数组 private int arcNum;// 边的数目 private boolean[] visited;// 访问标志数组 // 确定顶点在图中的位置 public int locataVex(char ve...
邻接表存储无向图
adjacentList.h#pragma once //邻接表存储的无向图 # include<iostream> # include"vertex.h" typedef struct _listNode//表节点 { int iAdjaVeretex;//邻接点编号 int info;//边上信息 struct _listNode*next=NULL; }listNode
数据结构学习——图的邻接表(无向图,带权值有向图)
邻接表是数组与链表相结合的存储方法,相比于顺序存储结构(邻接矩阵),节省空间。 来个小例子(无向图): 图1 上图邻接表的结构: 邻接表用链表来存储邻接点(分两个域,一个存顶点下标,一个存下一个邻接点的引用),通过一个类(我用了内部类,所以是private)定义邻接点: private class AdgvexType { int verNum = -1;//存储顶点...
Java实现邻接表的DFS和BFS
顶点类 public class Vertex { String verName; boolean visited; Vertex nextVertex; } 图类 public class Graph extends Constent { Vertex[] verList = new Vertex[MAX_VERTEX]; int VerNum; int EdgeNum; } 常...
邻接表来实现图的存储
采用邻接表来实现图的存储,并输入输出邻接表的信息,并用邻接表来实现图的广度优先遍历。
c语言实现无向图的邻接表储存
图有一种邻接表储存结构,这里以无向图为例,输入图的参数,构造并输出图的邻接表。 #include #include #define MAX_VERTEX_NUM 100 typedef struct ArcNode{ int adjvex;//该边的另一个顶点的位置 struct ArcNode *nextarc; //指向下一条边 }ArcNode; typedef struct VN
java实现邻接表图、DFS、BFS
package cn.jxau.dataStructure; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; /** * Created by 编
数据结构之邻接表存储有向图或无向图及其相关操作(C++)
#include&amp;lt;iostream&amp;gt; using namespace std; #define maxsize 20 //边表 typedef struct ArcNode{     int adjvex;//结点的数据域,存顶点号     int info;//结点的数据域,保存边的权值     ArcNode *nextarc;//结点的指针域,指向下一条边结点  }ArcNod...
java数据结构之图(邻接矩阵和邻接表)
JAVA数据结构之图 1、图的介绍和原理 1.1、图的基本概念 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和边集分别记为V(G)和E(G)。依据图的边集是否为有向,可把图分为有向图和无向图,根据图是否有权重,可以分为有权图和无权图。 图的基本术语: 1:邻接点----在一个无向图中,若存在一条边(Vi,Vj),则称Vi,Vj为此边的两个端点,并称它们
数据结构 图的邻接表表示转换成邻接矩阵表示的算法
图的邻接表表示转换成邻接矩阵表示的算法。 下面这个是有向图邻接表表示转换成邻接矩阵 #include #include #include int a[100][100];//邻接矩阵的载体 typedef struct ArcNode{ int adjvex; struct ArcNode *nextarc; }ArcNode; //表结点 typedef struct V
无向图的邻接表构建和遍历
无向图的邻接表构建和两种遍历,存储表示,邻接表的创建,深度优先和广度优先遍历
图的存储结构--多重邻接表(邻接多重表)
和十字链表类似。 区别在于数组存的链表的元素的结构不同。 十字链表数组元素的结构是:数据、第一条入边引用、第一条出边引用。 十字链表链表的元素结构是:边的起点、边的终点、下一条出边引用、下一条入边引用 而 多重邻接表数组元素结构是:数据、包含 当前索引对应顶点 的第一条边引用。 多重邻接表链表的元素结构是:边的起点、包含当前边的起点的另一条边的引用、边的终点、包含当前边终点的另一条边的...
dfs, bfs之邻接表无向图实验
dfs, bfs之邻接表无向图实验
真题2015 无向图采用邻接表存储方式,删除边
题目:已知无向图采用邻接表存储方式,试写出删除边(i,j)的算法。 在这里插入代码片 voidDeletEdge(AdjListg,inti,int j){//在用邻接表方式存储的无向图g中,删除边(i,j) p=g[i].firstarc;pre=null; //删顶点i的边结点(i,j),pre是前驱指针 while(p) if(p-&amp;amp;gt;adjvex==j){ i...
数据结构--无向图的邻接多重表存储结构
无向图的邻接多重表已经在之前一篇文章里介绍了:传送门下面我进一步地来介绍如何实现无向图的初始化,深度优先搜索DFS,广度优先搜索BFS,深度优先搜索的非递归算法1.无向图的初始化://建立顶点表 void AddVex(OLGraph *G) { int i; for(i=0;i<G->vexnum;i++) { G->xlist[i].data=i;
java Timetask 访问service 抛空指针异常解决方案
java Timetask 访问service 抛空指针异常解决方案            错误原因: 创建自己的timetask 定时器继承了TimerTask之后,当执行run时还未进行service的注入。此时抛出空指针异常;以下为最终解决方案         // 自定义的TimerTask          public class WXFocusTask extends Ti
用邻接表存储有向图实现的dfs和bfs
#include #include #define MAX 20 using namespace std; class ArcNode { public: int adjvex; //存储弧的终止位置 ArcNode*nextarc; }; class VNode { public: char data; //结点信息 ArcNode*firsarc;//第一个弧边的地址 }; //定义
怎么根据无向图画出邻接表
无向图的邻接表和数据结构中的链表类似,但是又有不同,在软件设计师考试中也曾经出现,今天就给大家讲一下怎么根据无向图来画邻接表 工具/原料 无向图 方法/步骤 1 我们先画出一个无向图,需要注意的就是无向图是没有箭头的,千万不要把箭头画上,如下图所示 2 然后根据上图的点的范围,画出一个长条矩形框。不会或者不懂的可以参考下图 3 分析该顶...
8、【数据结构】图之邻接矩阵、邻接表无向图
一、邻接矩阵无向图 1、基本定义 2、创建矩阵 2.1 创建图(用已提供的矩阵) 2.2 创建图(自己输入) 二、邻接表无向图 1、基本定义 2、创建矩阵 2.1 创建图(用已提供的矩阵) 2.2 创建图(自己输入) ...