https://www.acmicpc.net/problem/14923
14923번: 미로 탈출
홍익이는 사악한 마법사의 꾐에 속아 N x M 미로 (Hx, Hy) 위치에 떨어졌다. 다행히도 홍익이는 마법사가 만든 미로의 탈출 위치(Ex, Ey)를 알고 있다. 하지만 미로에는 곳곳에 마법사가 설치한 벽이
www.acmicpc.net
[난이도] Gold4
[유형] BFS
[풀이]
visit[N][M][k] (k= 지팡이 사용횟수) 배열을 선언해서 현재 지팡이 사용횟수를 저장하는
방식으로 BFS를 돌려주면 된다.
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/14923.cpp
#include <cstdio> #include <queue> using namespace std; struct P{int y,x,k;}; int map[1000][1000],N,M,hy,hx,ey,ex,dy[4]={-1,1,0,0},dx[4]={0,0,1,-1}; int visit[1000][1000][2]; int main(){ scanf("%d%d%d%d%d%d",&N,&M,&hy,&hx,&ey,&ex); hy--,hx--,ey--,ex--; for(int i=0;i<N;i++) for(int j=0;j<M;j++) scanf("%d",&map[i][j]); queue<P> q; visit[hy][hx][0]=1; q.push({hy,hx,0}); int cnt = 0; while(!q.empty()){ int qsz = q.size(); while(qsz--){ auto f = q.front(); q.pop(); if(f.y==ey && f.x==ex){ printf("%d",cnt); return 0; } for(int i=0;i<4;i++){ int ny = f.y+dy[i]; int nx = f.x+dx[i]; if(ny < 0 || nx < 0 || ny >= N || nx >= M) continue; if(map[ny][nx]){ if(!f.k && !visit[ny][nx][1]) { visit[ny][nx][1]=1; q.push({ny,nx,1}); } }else if(!visit[ny][nx][f.k]){ visit[ny][nx][f.k]=1; q.push({ny,nx,f.k}); } } } cnt++; } puts(""); }
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 2002 : 추월 (C++) (0) | 2021.01.17 |
---|---|
[BOJ/백준][Gold4] 4803 : 트리 (C++) (0) | 2021.01.17 |
[BOJ/백준][Gold4] 2655 : 가장높은탑쌓기 (C++) (0) | 2021.01.13 |
[BOJ/백준][Gold4] 14864 : 줄서기 (C++) (0) | 2021.01.13 |
[BOJ/백준][Gold4] 14938 : 서강그라운드 (C++) (0) | 2021.01.13 |