我创建一个简单的相邻List,其中每个节点都是String类型
图的实现是:
HashMap<String,HashSet<String>> //From every node to a Set of nodes...
但是在BFS实现中我得到了NullPointerException
我正在玩它,但我不明白真正的问题
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
HashMap<String,HashSet<String>> m=new HashMap();
HashSet<String> h_s = new HashSet();
//Now fill in the h_s
h_s.add("B");
h_s.add("C");
h_s.add("D");
//Path from A --- to --> B,C,D
m.put("A",h_s);
// Now let`s make a BFS
Queue<String> q=new PriorityQueue();
//starting from A
q.add("A");
String current_vertex;
while (!q.isEmpty()) {
current_vertex = q.remove();
//For every vertex adjacent with current_vertex
for (String vertex_to:m.get(current_vertex)) {
System.out.println("BFS is checking "+vertex_to);
q.add(vertex_to);//This line causing NullPointerException
}
}
}
但是,如果我们删除行
q.add(vertex_to)
一切都很好
这让我更加困惑。
请详细解释,因为我认为我错过了重要的
提前致谢
答案 0 :(得分:1)
您的地图只有&#34; A&#34;键,所以当你添加&#34; B&#34;,&#34; C&#34;和&#34; D&#34;到队列,然后将其从队列中删除,m.get(current_vertex)
返回null。
您必须检查密钥是否在地图中:
while (!q.isEmpty()) {
current_vertex = q.remove();
//For every vertex adjacent with current_vertex
if (m.containsKey(current_vertex) {
for (String vertex_to:m.get(current_vertex)) {
System.out.println("BFS is checking "+vertex_to);
q.add(vertex_to);//This line causing NullPointerException
}
}
}