一、BFS
BFS广度遍历大多数用队列来实现
public static void BFS_G(HashMap<String,String []> graph, String s) {
LinkedList<String> stack = new LinkedList<>();
stack.addLast(s);
HashSet<String> seen = new HashSet<>();
seen.add(s);
while (!stack.isEmpty()) {
String vertrix = stack.pollFirst();
String[] nodes = graph.get(vertrix);
for (String w : nodes) {
if (!seen.contains(w)) {
stack.addLast(w);
seen.add(w);
}
}
System.out.println(vertrix);
}
}
public static void main(String[] args) {
Dijkstra s=new Dijkstra();
HashMap<String,String[]> graph = new HashMap <>();
graph.put("A", new String[]{"B", "C"});
graph.put("B",new String[]{"A","C","D"});
graph.put("C",new String[]{"A","B","D","E"});
graph.put("D",new String[]{"B","C","E","F"});
graph.put("E",new String[]{"C","D"});
graph.put("F",new String[]{"D"});
Dijkstra.BFS_G(graph,"A");
}
二、DFS
DFS深度遍历一条路走到天黑有点像递归,没路走了再回溯,大多数用栈来实现
public static void DFS_G(HashMap<String,String []> graph, String s) {
Stack<String> stack = new Stack<>();
stack.add(s);
HashSet<String> seen = new HashSet<>();
seen.add(s);
while (!stack.isEmpty()) {
String vertrix = stack.pop();
String[] nodes = graph.get(vertrix);
for (String w : nodes) {
if (!seen.contains(w)) {
stack.add(w);
seen.add(w);
}
}
System.out.println(vertrix);
}
}
public static void main(String[] args) {
Dijkstra s=new Dijkstra();
HashMap<String,String[]> graph = new HashMap <>();
graph.put("A", new String[]{"B", "C"});
graph.put("B",new String[]{"A","C","D"});
graph.put("C",new String[]{"A","B","D","E"});
graph.put("D",new String[]{"B","C","E","F"});
graph.put("E",new String[]{"C","D"});
graph.put("F",new String[]{"D"});
Dijkstra.DFS_G(graph,"E");
}