๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/18404)
< ํ๋ช ํ ๋์ดํธ >
๋ฌธ์ ํ์ด
bfs๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _18404_ { // ํ๋ช
ํ ๋์ดํธ
static boolean visited[][];
static int arr[][], result[], n, cnt;
static int dx[] = { -2, -2, -1, -1, 1, 1, 2, 2 };
static int dy[] = { -1, 1, -2, 2, -2, 2, -1, 1 };
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(bf.readLine());
n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
visited = new boolean[n][n];
cnt = 0;
st = new StringTokenizer(bf.readLine());
int x = Integer.parseInt(st.nextToken()) - 1;
int y = Integer.parseInt(st.nextToken()) - 1;
arr = new int[m][2];
result = new int[m];
for (int i = 0; i < m; i++) {
st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken()) - 1;
int b = Integer.parseInt(st.nextToken()) - 1;
arr[i][0] = a;
arr[i][1] = b;
}
bfs(x, y);
for (int i = 0; i < m; i++) {
bw.write(result[i] + " ");
}
bw.flush();
}
private static void bfs(int x, int y) {
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[] { x, y, 0 });
visited[x][y] = true;
while (!queue.isEmpty()) {
int temp[] = queue.poll();
for (int i = 0; i < 8; i++) {
int a = temp[0] + dx[i];
int b = temp[1] + dy[i];
if (a >= 0 && a < n && b >= 0 && b < n && !visited[a][b]) {
visited[a][b] = true;
for (int j = 0; j < arr.length; j++) {
if (a == arr[j][0] && b == arr[j][1]) {
result[j] = temp[2] + 1;
cnt += 1;
break;
}
}
queue.add(new int[] { a, b, temp[2] + 1 });
}
if (cnt == result.length)
break;
}
if (cnt == result.length)
break;
}
}
}
Main
๋ณ์)
n : ์ฒด์คํ ํฌ๊ธฐ
m : ์๋ํธ ๋ง์ ๊ฐ์
visited : ๋ฐฉ๋ฌธ ์ฌ๋ถ
cnt : ์๋ํธ ๋ง ์ก์ ์
x, y : ๋์ดํธ์ ์์น
arr : ์๋ํธ ๋ง ์์น ์ ์ฅ
result : ์๋ํธ ๋ง์ ์ก๊ธฐ ์ํ ์ต์ ์ด๋ ์ ์ ์ฅ
a, b : ์๋ํธ ๋ง์ ์์น
- ์ฒด์คํ์ ํฌ๊ธฐ(n), ์๋ํธ ๋ง์ ๊ฐ์(m) ์ ๋ ฅ
- ๋์ดํธ์ ์์น (x, y) ์ ๋ ฅ
- m๊ฐ์ ์ค์ ๊ฑธ์ณ ์๋ํธ์ ๋ง์ ์์น(a, b)๋ฅผ ์ ๋ ฅ๋ฐ์ ์ ์ฅ
- bfs ํจ์ ํธ์ถ
- ์ ๋ต(result) ์ถ๋ ฅ
bfs
- queue์ ์ ์ฅ [x, y, ์ด๋ ์]
- queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
: 8๊ฐ์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ํ์ฌ ์ฒด์คํ ๋ฒ์ ์์ด๋ฉฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด ๋ฐฉ๋ฌธ ํ์ ๋ฐ queue์ ์ ์ฅ
: ์ด๋ํ ์์น๊ฐ ์๋ํธ ๋ง์ด ์๋ ์์น๋ผ๋ฉด ์ต์ ์ด๋ ์ ์ ์ฅ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2668_์ซ์๊ณ ๋ฅด๊ธฐ (0) | 2023.08.01 |
---|---|
[Baekjoon] 25416_๋น ๋ฅธ ์ซ์ ํ์ (0) | 2023.07.31 |
[Baekjoon] 25418_์ ์ a๋ฅผ k๋ก ๋ง๋ค๊ธฐ (0) | 2023.07.27 |
[Baekjoon] 12852_1๋ก ๋ง๋ค๊ธฐ 2 (0) | 2023.07.25 |
[Baekjoon] 21773_๊ฐํฌ์ ํ๋ก์ธ์ค 1 (0) | 2023.07.24 |