本文共 1708 字,大约阅读时间需要 5 分钟。
package Graph; import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;import java.util.Stack; import csp2014_9_4.Main; public class BreadThFirstSearch { boolean []visit; LinkedList[]map; int[]path; int[]dist; int v, e, s; public static void main(String[] args) { new BreadThFirstSearch().run();//注意 类要匹配。。。 } public void run() { Scanner in = new Scanner(System.in); v = in.nextInt(); e = in.nextInt(); map = new LinkedList[v];//搜素之前就要创建 for(int i = 0; i < v; i++ ) { map[i] = new LinkedList<>(); } for(int i = 0; i < e; i++ ) { int a = in.nextInt(); int b = in.nextInt(); map[a].offer(b); map[b].offer(a); } BreadFirst(); for(int i = 0; i < v; i++ ) { if(visit[i]) { System.out.println("distance = " + dist[i]); printPath(i); } System.out.println(); } } public void BreadFirst() { visit = new boolean[v]; path = new int[v]; dist = new int[v]; s = 1; bfs(s); } public void bfs(int s) { Queue que = new LinkedList<>(); que.offer(s); visit[s] = true; while(!que.isEmpty()) { int cur = que.poll(); for(int i = 0; i < map[cur].size(); i++ ) { int w = map[cur].get(i); if(!visit[w]) { dist[w] = dist[cur] + 1; visit[w] = true; path[w] = cur; que.offer(w); } } } } public void printPath(int v) { if(!visit[v]) return ; if(v == s) { System.out.print(v); return; } printPath(path[v]); System.out.print("-" + v); } public Iterable printPathSec(int v){ if(!visit[v]) return null; Stack stack = new Stack<>(); for(int x = v; x != s; x = path[x]) stack.push(x); stack.push(s); return stack; }}
转载地址:http://klimi.baihongyu.com/