Java

[Java] BFS

bornsoon 2025. 4. 26. 00:32
import java.util.LinkedList;
import java.util.Queue;

public class Main {
    // 그래프를 인접 리스트로 표현
    private static List<List<Integer>> graph;
    private static boolean[] visited;
    
    public static void main(String[] args) {
    	// 예제 그래프 초기화 (0번부터 8번까지의 노드)
    	int n = 9;
        graph = new ArrayList<>();
        for (int i = 0; i < n; i++) {
        	graph.add(new ArrayList<>());
        }
        
        // 간선 추가 (양방향)
        addEdge(0, 1);
        addEdge(0, 2);
        addEdge(1, 3);
        addEdge(1, 4);
        addEdge(2, 5);
        addEdge(2, 6);
        addEdge(3, 7);
        addEdge(4, 8);
        
        bfs(0);
    }
    
    // 그래프에 간선 추가 (양방향)
    private static void addEdge(int u, int v) {
        graph.get(u).add(v);
        graph.get(v).add(u);
    }
    
    public static void bfs(int start) {
    	Queue<Integer> queue = new LinkedList<>();
        boolean[] visited = new boolean[graph.size()];
        StringBuilder sb = new StringBuilder();
        
        // 시작 노드 처리
        queue.offer(start);
        visited[start] = true;
        
        while (!queue.isEmpty()) {
       	    int current = queue.poll();
            sb.append(current + " ");
            
            // 현재 노드의 인접 노드들을 큐에 추가
            for (int neighbor : graph.get(current)) {
            	if (!visited[neighbor]) {
                    queue.offer(neighbor);
                    visited[neighbor] = true;
                }
            }
        }
        System.out.println(sb.toString());
    }
}
728x90

'Java' 카테고리의 다른 글

[Java] Comparator, CompareTo, thenComparing  (0) 2025.04.28
[Java] DFS  (0) 2025.04.26
[Java] StringBuilder  (0) 2025.04.25
[Java] ProcessBuilder  (0) 2025.03.25
[Spring] NoArgsConstructor / AllArgsConstructor  (0) 2025.01.25