본문 바로가기
공부-코딩테스트/코테에 도움이 될만한 지식들

BFS DFS 자바코드

by 령과 2022. 9. 30.

가장 기초적인 BFS,DFS 알고리즘이 빠져있었다.

오랜만에 봤는데 기억이 잘 안나서 설명보단 코드를 기재한다.

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

public class BFS_DFS {
	static int[][] map;
	static boolean[] visit;
	static int N = 7;

	static int[] edge(int a,int b) {
		int[] re = {a,b};
		return re;
	}
	
	
	public static void main(String[] args) {
		map = new int[7][7];
		ArrayList<int[]> edge = new ArrayList<int[]>();
		edge.add(edge(0,2));
		edge.add(edge(0,3));
		edge.add(edge(2,1));
		edge.add(edge(2,4));
		edge.add(edge(4,5));
		edge.add(edge(3,6));
		
		
		for(int[] tmp:edge) {
			map[tmp[0]][tmp[1]] = 1;
			map[tmp[1]][tmp[0]] = 1;
			
		}
		
		for(int i = 0 ; i < N ;i++) {
			for(int j = 0 ; j < N ; j++) {
				System.out.print(map[i][j]+" ");
			}
			System.out.println();
		}
		
		
		
		
		visit = new boolean[N];
		System.out.print("dfs: ");
		dfs(0);
		
		System.out.println();
		
		visit = new boolean[N];
		System.out.print("bfs: ");
		bfs(0);
	}

	static void dfs(int i) {
		visit[i] = true;
		System.out.print(i + " ");
		for (int j = 0; j < N; j++) {
			if (map[i][j] == 1 && visit[j] == false) {
				dfs(j);
			}
		}
	}

	static void bfs(int i) {
		Queue<Integer> q = new LinkedList<>();
		q.offer(i);
		visit[i] = true;
		while (!q.isEmpty()) {
			int temp = q.poll();
			System.out.print(temp + " ");
			for (int j = 0; j < N; j++) {
				if (map[temp][j] == 1 && visit[j] == false) {
					q.offer(j);
					visit[j] = true;
				}
			}
		}
	}
}

위에서 사용한 그래프 형태
실행결과

댓글