BFS使用Map <integer,arraylist <integer =“”>&gt; </integer,>

时间:2012-12-29 22:11:06

标签: java breadth-first-search adjacency-list

我正在尝试创建一个无向图,所以我在执行输出后使用下面的代码创建一个图:

{1=[2, 5, 10, 18], 
 2=[1, 3], 3=[2, 4], 
 4=[3, 5], 5=[1, 4, 6], 
 6=[5, 7], 7=[6, 8], 
 8=[7, 9], 9=[8], 10=[1, 11], 
 11=[10, 12, 13, 11, 11], 
 12=[11, 19], 13=[11], 
 19=[12], 18=[1], 
 21=[22], 22=[21]}

现在我尝试实现BFS以找到最短路径。 我的问题是:如果有可能我可以使用hashmap来实现bfs吗?或者我不应该使用哪种方法代替hashmap。

Map<Integer, ArrayList<Integer>> adj;

public Graph(ArrayList<String> nodes) {
    adj = new HashMap<Integer, ArrayList<Integer>>();
    for (int i = 0; i < nodes.size(); ++i) {
        adj.put(Integer.parseInt(nodes.get(i)), new ArrayList<Integer>());
        }
    }

public void addNeighbor(int v1, int v2) {
    adj.get(v1).add(v2);
}

1 个答案:

答案 0 :(得分:1)

  

如果可能的话,是否可以使用hashmap来实现bfs   我该怎么做?或者我不应该使用哪种方法   而不是hashmap。

是的,这是可能的。您正在使用邻接列表。要实现BFS,您需要一个队列(在Java中有一个接口)。要遍历图表,您需要从队列中的单个节点开始,并且当此队列不为空时,您将获得下一个节点并将所有相邻节点添加到队列中,此处您将需要访问Map