View
๐กBFS(Breadth First Search)
: ๋๋น ์ฐ์ ํ์
์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง BFS๋ ์ฝ๊ฒ๋งํด ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
BFS๊ตฌํ์๋ ์ ์
์ ์ถ ๋ฐฉ์์ธ ํ ์๋ฃ๊ตฌ์กฐ
๋ฅผ ์ฌ์ฉํ๋ค.
๐กBFS ๋์ ๋ฐฉ์
- ํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
- ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ธ ๋ค ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์ ํ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
- 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณต
1๏ธโฃ ์์๋ ธ๋์ธ 1์ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํจ
2๏ธโฃ ํ์์ 1์ ๊บผ๋ด๊ณ ๋ฐฉ๋ฌธํ์ง ์์ 2, 3, 8์ ๋ชจ๋ ํ์ ์ฝ์ ํ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํจ
3๏ธโฃ ํ์์ ๋ ธ๋ 2๋ฅผ ๊บผ๋ธ ๋ค, ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ 7์ ํ์ ์ฝ์ ํ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํจ
4๏ธโฃ ํ์์ ๋ ธ๋ 3์ ๊บผ๋ด๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋์ธ 4,5๋ฅผ ๋ชจ๋ ํ์ ์ฝ์ ํ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
5๏ธโฃ ํ์์ ๋
ธ๋ 8์ ๊บผ๋ด๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋๊ฐ ์์ผ๋ฏ๋ก ๋ฌด์ํ๋ค
6๏ธโฃ ํ์์ ๋ ธ๋7์ ๊บผ๋ด๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ 6์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํจ
7๏ธโฃ ๋จ์์๋ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์
โ ๋ฐ๋ผ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ฐจ๋ก๋๋ก ๊บผ๋ด๋ฉด ์ต์ข ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์
๐กBFS์ฝ๋ (Java)
import java.util.ArrayDeque;
import java.util.Queue;
public class BASIC_BFS_DFS {
static int[][] map = { // 0 index๋ dummy
{0, 0, 0, 0, 0, 0, 0},
{0, 11, 12, 13, 14, 15, 16},
{0, 21, 22, 23, 24, 25, 26},
{0, 31, 32, 33, 34, 35, 36},
{0, 41, 42, 43, 44, 45, 46},
{0, 51, 52, 53, 54, 55, 56},
{0, 61, 62, 63, 64, 65, 66},
};
// ์๋ฃ ๊ตฌ์กฐ
static Queue<Node> queue = new ArrayDeque<>();
static boolean[][] visit;
// ์ฌ๋ฐฉํ์ delta ์ - ํ - ์ข - ์ฐ
static int[] dy = { -1, 1, 0, 0 };
static int[] dx = { 0, 0,-1, 1 };
static int COUNT;
public static void main(String[] args) {
// bfs
COUNT = 0;
visit = new boolean[7][7];
bfs( 1, 1 );
}
// ๋ฐฉ๋ฌธํ๋ ๊ณณ์ ๋ค์ ์์ํ๊ธฐ ์ํด์ ์ ๊น ๋ด์๋๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ Queue
// ๋ณ๋์ ํด๋์ค๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ๋ง๋ ๋ค. ( ํด๋์ค ๋๋ ๋ฐฐ์ด )
// visit
// ํ๋ฒ๋ง ํธ์ถ
static void bfs( int y, int x ) {
// ์ต์ด y, x ๋ฅผ ์ด์ฉํด์ Node ํ ๊ฐ๋ฅผ ๋ด๋๋ค.
queue.offer(new Node(y, x));
visit[y][x] = true;
while( ! queue.isEmpty() ) {
Node node = queue.poll();
COUNT++;
//System.out.println(node);
for (int d = 0; d < 4; d++) {
int ny = node.y + dy[d];
int nx = node.x + dx[d];
if( ny < 1 || nx < 1 || ny >=7 || nx >= 7 || visit[ny][nx]) continue;
queue.offer(new Node(ny, nx));
visit[ny][nx] = true;
}
}
System.out.println("BFS : COUNT : " + COUNT);
}
static class Node{
int y, x;
public Node(int y, int x) {
this.y = y;
this.x = x;
}
@Override
public String toString() {
return "Node [y=" + y + ", x=" + x + "]";
}
}
}
์ฐธ๊ณ : Copy of ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] BFS / DFS ์ธ์ ๋ฆฌ์คํธ์ ์ฌ๊ท (0) | 2022.08.30 |
---|---|
[Java] ์์ด/์กฐํฉ/๋ถ๋ถ์งํฉ (0) | 2022.08.30 |
[Java] ์์ด/์กฐํฉ/๋ถ๋ถ์งํฉ (0) | 2022.08.30 |
[Java] ์กฐํฉ (Combination) (0) | 2022.08.30 |
[Java] ์์ด(permutation) (0) | 2022.08.30 |