알고리즘/백준
1189_컴백 홈
베리영young
2024. 8. 7. 16:47
사용 알고리즘: bfs,백트래킹
사용 언어: java
package week11;
import java.io.*;
import java.util.*;
public class Main_bj_1189_컴백홈 {
static int r,c,k, ans;
static char[][] map;
static int[] dx = {1,-1,0,0};
static int[] dy = {0,0,1,-1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
map = new char[r][c];
for (int i = 0; i < r; i++) {
String s = br.readLine();
for (int j = 0; j < c; j++) {
map[i][j] = s.charAt(j);
}
}
// for(int i = 0; i < r; i++) System.out.println(Arrays.toString(map[i]));
//
bfs_1189();
System.out.println(ans);
}
private static void bfs_1189() {
Queue<Hansu> q = new ArrayDeque<>();
boolean[][] visit = new boolean[r][c];
visit[r-1][0] = true;
q.add(new Hansu(r-1, 0, visit, 1));
while(!q.isEmpty()) {
Hansu hansu = q.poll();
if(hansu.x == 0 && hansu.y == c-1) {
if(hansu.move == k) ans++;
continue;
}
if(hansu.move > k) continue;
for(int d=0; d<4; d++) {
int nx = hansu.x + dx[d];
int ny = hansu.y + dy[d];
if(nx>=0&&nx<r && ny>=0&&ny<c) {
if(map[nx][ny] != 'T' && !hansu.visit[nx][ny]) {
boolean[][] newVisit = copyVisit(hansu.visit);
newVisit[nx][ny] = true;
q.add(new Hansu(nx, ny, newVisit, hansu.move+1));
}
}
}
}
}
private static boolean[][] copyVisit(boolean[][] visit) {
boolean[][] tmp = new boolean[r][c];
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
tmp[i][j] = visit[i][j];
}
}
return tmp;
}
}
class Hansu {
int x;
int y;
boolean[][] visit;
int move;
public Hansu(int x,int y, boolean[][] visit, int move) {
this.x = x;
this.y = y;
this.visit = visit;
this.move = move;
}
}
오랜만에 풀었다고 한참 걸린 거 실화?