๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 1260๋ฒˆ: DFS์™€ BFS

by ์ฃผ๋ฐœ2 2020. 1. 22.
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/1260

 

1260๋ฒˆ: DFS์™€ BFS

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ„์„ ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๊ฐ„์„ ์€ ์–‘๋ฐฉํ–ฅ์ด๋‹ค.

www.acmicpc.net

์ฝ”๋“œ

import java.util.*;

public class Main {
	static int map[][];
	static boolean [] visit;
	static int n, m, v;
	
	// ์ธ์ ‘ํ–‰๋ ฌ
	public static void dfs(int i) {
		visit[i] = true;	// ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ๋ฒˆํ˜ธ v๋Š” ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฏ€๋กœ true๋กœ ์„ค์ •
		System.out.print(i + " ");
		for(int j=1; j<=n; j++) {
			if(map[i][j] == 1 && visit[j] == false)
				dfs(j);	// ๋‚ด๊ฐ€ ์ฐพ์€ ๊ฒฝ๋กœ๊ฐ€ ๋งŒ์•ฝ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๋‹ค์Œ ๊ณณ์œผ๋กœ ์ด๋™์‹œํ‚ค๊ณ , ์—†์œผ๋ฉด ๋‹ค์‹œ ์žฌ๊ท€ํ˜ธ์ถœ๋กœ ๋Œ์•„์˜ด.
		}
	}
	
	// ์ธ์ ‘ํ–‰๋ ฌ
	public static void bfs(int i) {
		Queue<Integer> q = new LinkedList<Integer>();
		q.offer(i);
		visit[i] = true;			// ๋ฐฉ๋ฌธํ•œ ์œ„์น˜๋Š” ์•Œ์•„์•ผํ•˜๋ฏ€๋กœ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด visit ํ•„์š”
		while(!q.isEmpty()) {		// ํ๊ฐ€ ๋น„์–ด์žˆ์„๋•Œ๊นŒ์ง€
			int temp = q.poll();	// ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฌธํ•œ ์œ„์น˜๋Š” ๋นผ์ค€๋‹ค.
			System.out.print(temp + " ");
			
			for(int k=1; k<=n; k++) {
				if(map[temp][k] == 1 && visit[k] == false) {
					q.offer(k);
					visit[k] = true;	// true๋ฉด ๋ฐฉ๋ฌธํ•œ๊ฒƒ
				}
			}
		}
	}
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();	// ์ •์ 
		m = scan.nextInt();	// ๊ฐ„์„ 
		v = scan.nextInt();	// ํƒ์ƒ‰ ์‹œ์žฅํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ
		map = new int[n+1][n+1];	// ๊ฐ ์ •์ ๊ฐ„ ํƒ์ƒ‰ ๊ฒฝ๋กœ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด
		visit = new boolean[n+1];	// ์ •์ ์˜ ํƒ์ƒ‰ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด
		
		for(int i=1; i<=m; i++) {
			int a = scan.nextInt();
			int b = scan.nextInt();
			map[a][b] = map[b][a] = 1;
		}
		
		dfs(v);
		
		for(int i=1; i<=n; i++)
			visit[i] = false;
		
		System.out.println();
		
		bfs(v);
		
		scan.close();
	}

}

 

ํ’€์ด

์ฐธ๊ณ 

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€