[SWEA] 1227 s/w 문제해결 기본 7일차 - 미로2
단순 입력을 받고 bfs를 사용하여 갈 수 있는 길을 따라간다.
현재 방문하고 있는 위치를 visit 체크해주는 것이 가장 중요하다.
-
python
deg = [(-1, 0), (1, 0), (0, -1), (0, 1)] def is_wall(r, c): if r<0 or r>= 100 or c<0 or c>= 100: return True return False def bfs(start, end): Q.append(start) cnt = 0 er, ec = end while Q: now = Q.pop(0) nr, nc = now maze[nr][nc] = 9 for dr, dc in deg: tr, tc = nr + dr, nc + dc if tr == er and tc == ec: return 1 if not is_wall(tr, tc) and not maze[tr][tc]: Q.append([tr, tc]) return 0 for tc in range(10): case_num = int(input()) maze = [] start, end = [], [] for i in range(100): tmp = [] cnt = 0 for j in input(): tmp.append(int(j)) if int(j) == 2: start = [i, cnt] if int(j) == 3: end = [i, cnt] cnt += 1 maze.append(tmp) Q = [] print(f"#{tc + 1} {bfs(start, end)}")
-
c
#include <stdio.h> int test_num; int maze[100][100]; int sr, sc; int er, ec; int rp, wp; int nr, nc; int drs[4] = { -1, 1, 0, 0 }; int dcs[4] = { 0, 0, -1, 1 }; int dr, dc, tr, tc; typedef struct Queue { int r, c; }Queue; Queue Q[100*100]; void inQue(int r, int c) { Q[wp].r = r; Q[wp].c = c; wp++; } int bfs(int sr, int sc, int er, int ec) { inQue(sr, sc); while (rp < wp) { nr = Q[rp].r; nc = Q[rp].c; for (int i = 0; i < 4; i++) { dr = drs[i]; dc = dcs[i]; tr = nr + dr; tc = nc + dc; if (tr == er && tc == ec) { return 1; } if (maze[tr][tc] == 0) { inQue(tr, tc); maze[tr][tc] = 9; } } rp++; } return 0; } int main(void) { for (int tc = 1; tc <= 10; tc++) { scanf("%d", &test_num); for (int r = 0; r < 100; r++) { for (int c = 0; c < 100; c++) { scanf("%1d", &maze[r][c]); if (maze[r][c] == 2) { sr = r; sc = c; } else if (maze[r][c] == 3) { er = r; ec = c; } } } rp = wp = 0; printf("#%d %d\n", tc, bfs(sr, sc, er, ec)); } return 0; }