-
java로 구현한 dfs와 bfs 코드(백준 1260번, DFS와 BFS)알고리즘 2023. 12. 13. 20:50
- dfs : 파라미터 = (그래프, 현재값, 방문한 list) -> 재귀 이용
- bfs : 파라미터 = (그래프, 현재값) -> 큐 이용
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class BFSAndDFS{ public static ArrayList<Integer> dfs(HashMap<Integer, ArrayList<Integer>> map, int cur_v, ArrayList<Integer> visited){ visited.add(cur_v); for(int v : map.get(cur_v)) { if(!visited.contains(v)) { visited = dfs(map,v,visited); } } return visited; } public static ArrayList<Integer> bfs(HashMap<Integer, ArrayList<Integer>> map, int cur_v){ ArrayList<Integer> visited = new ArrayList<Integer>(); visited.add(cur_v); Queue<Integer> queue = new LinkedList<Integer>(); queue.add(cur_v); while(queue.size()!=0) { cur_v = queue.poll(); for(int v : map.get(cur_v)) { if(!visited.contains(v)) { visited.add(v); queue.add(v); } } } return visited; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine());; StringBuilder sb = new StringBuilder(); int n = Integer.parseInt(st.nextToken()); int k = Integer.parseInt(st.nextToken()); int start = Integer.parseInt(st.nextToken()); String answer = ""; HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>(); for(int i=1; i<=n; i++) { ArrayList<Integer> list = new ArrayList<Integer>(); map.put(i, list); } for(int i=0; i<k; i++) { st = new StringTokenizer(br.readLine()); int frist = Integer.parseInt(st.nextToken()); int second = Integer.parseInt(st.nextToken()); map.get(frist).add(second); map.get(second).add(frist); } //value값 오름차순 정렬 for(int key : map.keySet()) { Collections.sort(map.get(key)); } ArrayList<Integer> visited = new ArrayList<Integer>(); ArrayList<Integer> ans = dfs(map, start, visited); ArrayList<Integer> ans2 = bfs(map, start); for(int i=0; i<ans.size(); i++) { answer += ans.get(i)+" "; } answer += "\n"; for(int i=0; i<ans2.size(); i++) { answer += ans2.get(i)+" "; } sb.append(answer); bw.write(sb.toString()); // 최종 결과 출력 bw.flush(); bw.close(); } }
'알고리즘' 카테고리의 다른 글
우선순위 큐 (0) 2024.01.07 DP(동적 계획법) (0) 2023.12.17 재귀 (1) 2023.12.03 Dictionary - 가장 긴 연속된 수열 (4) 2023.12.03 딕셔너리 (2) 2023.12.03