BFS로 찾은 경로는 최단 경로이다.
answer
, maxPath
변수 사용edges
, paths
, visited
를 사용edges
에 startVertex
가 존재하면, nextVertex
를 방문 안한경우만(!visted
) 탐색maxPath
보다 큰 경우 교체하고 answer
을 1로 초기화, 같은 경우 answer
1 증가answer
반환import java.util.LinkedList;
import java.util.Queue;
class Solution {
static int[][] edges;
static int[] paths;
static boolean[] visited;
static int answer = 0;
static int maxPath = 0;
public int solution(int n, int[][] edge) {
edges = edge;
paths = new int[n];
visited = new boolean[n];
bfs();
return answer;
}
public void bfs() {
Queue<Integer> queue = new LinkedList();
visited[0] = true;
queue.add(1);
while (!queue.isEmpty()) {
int startVertex = queue.remove();
for (int i = 0; i < edges.length; i++) {
int nextVertex;
if (edges[i][0] == startVertex) {
nextVertex = edges[i][1];
} else if (edges[i][1] == startVertex) {
nextVertex = edges[i][0];
} else {
continue;
}
if (visited[nextVertex - 1]) {
continue;
}
int nextPath = paths[startVertex - 1] + 1;
paths[nextVertex - 1] = nextPath;
if (nextPath > maxPath) {
maxPath = nextPath;
answer = 1;
} else if (nextPath == maxPath) {
answer++;
}
visited[nextVertex - 1] = true;
queue.add(nextVertex);
}
}
}
}