전제 조건
1. 1번 정점을 root 노드로 하여 1번부터 탐색을 시작한다.
2. 번호가 작은 정점부터 탐색한다.
BFS 중요 코드
package com.company;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class bfs {
// 필요하면 사용 (사용안할 때도 많음)
static class Node {
int x;
int y;
public Node(int x, int y) {
this.x = x;
this.y = y;
}
}
static int vertex; // 정점의 수
static int edge; // 간선의 수
static int[][] map; // 정점들의 연관 관계를 담는 배열
static boolean[] visit; // 정점 방문 상태를 담는 배열
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
vertex = sc.nextInt();
edge = sc.nextInt();
map = new int[vertex + 1][vertex + 1];
visit = new boolean[vertex + 1];
for (int i = 1; i <= edge; i++) {
int start = sc.nextInt();
int next = sc.nextInt();
// 인접 행렬에 정점 연관 관계 저장
map[start][next] = 1;
map[next][start] = 1;
}
bfs(1, vertex);
}
public static void bfs(int start, int end){
// 주로 LinkedList를 사용함
Queue<Node> queue = new LinkedList<>();
queue.add(new Node(start,end));
visit[1] = true;
while (!queue.isEmpty()) {
// 정점 하나를 꺼냄
Node node = queue.poll();
visit[node.x] = true;
// 꺼낸 정점에 연결된 정점들 중 방문하지 않은 모든 정점을 queue 넣음
for (int i = 1; i < map.length; i++) {
if(!visit[i] && map[node.x][i] == 1) {
queue.add(new Node(i, end));
visit[i] = true;
}
}
}
}
}
package com.company;
import java.util.*;
public class bfs {
static boolean[] visit; // 정점 방문 상태를 담는 배열
static ArrayList<Integer>[] arrayList; // 정점들의 연관 관계를 담는 리스트
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int vertex = sc.nextInt();
int line = sc.nextInt();
int startVertex = sc.nextInt();
arrayList = new ArrayList[vertex + 1];
visit = new boolean[vertex + 1];
for (int i = 0; i < arrayList.length; i++) {
arrayList[i] = new ArrayList<>();
}
for (int i = 0; i <= line; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
// arrayList로 연결 관계 저장
arrayList[x].add(y);
arrayList[y].add(x);
}
for (int i = 1; i < vertex + 1; i++) {
Collections.sort(arrayList[i]);
}
bfs(startVertex);
}
public static void bfs(int x){
Queue<Integer> queue = new LinkedList<>();
queue.add(x);
visit[x] = true;
while (!queue.isEmpty()) {
int y = queue.poll();
System.out.print(y + " ");
for (int c : arrayList[y]) {
if(!visit[c]) {
visit[c] = true;
queue.add(c);
}
}
}
}
}
Pixabay로부터 입수된 mohamed Hassan님의 이미지 입니다.