ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.