Development Palette

무방향 그래프 인접 행렬 - BFS, DFS 본문

Algorithm/개념

무방향 그래프 인접 행렬 - BFS, DFS

징주 2021. 8. 24. 03:06
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class AdjMatrixTest {

	static int N; // 정점 개수
	static boolean[][] adjMatrix; // 인접행렬 (가중치 없음) 
	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(in.readLine());
		adjMatrix = new boolean[N][N];
		int C = Integer.parseInt(in.readLine()); // 간선 개수
		for (int i = 0; i < C; i++) {
			StringTokenizer st = new StringTokenizer(in.readLine());
			int from = Integer.parseInt(st.nextToken());
			int to = Integer.parseInt(st.nextToken());
			adjMatrix[to][from] = adjMatrix[from][to] = true;
		}
		System.out.println("=============bfs==================");
		bfs();
		System.out.println("=============dfs==================");
		boolean[] visited = new boolean[N];
		dfs(0,visited);
	}
	
	private static void bfs() {
		
		Queue<Integer> queue = new LinkedList<Integer>();
		boolean[] visited = new boolean[N];
		
		queue.offer(0);
		visited[0] = true;
		
		while(!queue.isEmpty()) {
			int current = queue.poll();
			System.out.println((char)(current+65));	//char로 변환
			
			for (int i = 0; i < N; i++) {
				if(!visited[i] // 미방문 
						&& adjMatrix[current][i] // 인접정점
				) {
					queue.offer(i);
					visited[i] = true;
				}
			}
		}
	}
	
	private static void dfs(int current,boolean[] visited) { //
		
		visited[current] = true;
		System.out.println((char)(current+65));
		
		for (int i = 0; i < N; i++) {
			if(!visited[i] && adjMatrix[current][i]) {
				dfs(i, visited);
			}
		}
	}

}

input

7
8
0 1
0 2
1 3
1 4
2 4
3 5
4 5
5 6

output


=============bfs==================
A
C
B
E
D
F
G
=============dfs==================
A
C
E
F
G
D
B
=============bfs==================
A
B
C
D
E
F
G
=============dfs==================
A
B
D
F
E
C
G

 

'Algorithm > 개념' 카테고리의 다른 글

[DP] 0 / 1 Knapsack  (0) 2021.09.26
Union - Find 알고리즘(서로소 집합)  (0) 2021.08.24
무방향 그래프 인접 리스트 - BFS, DFS  (0) 2021.08.24
분할정복기법 응용2  (0) 2021.08.19
BFS, DFS, Backtracking  (0) 2021.08.19
Comments