반응형
https://www.acmicpc.net/problem/1726
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<queue>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
#define pii pair<pair<int,int>,pair<int,int > >
int map[105][105];
int visited[105][105][5];
int N, M;
int stx, sty, enx, eny;
int stdir, endir;
int dy[] = { 1,0,-1,0 }; //동0 남1 서2 북3 ===> 동1 서2 남3 북4
int dx[] = { 0,1,0,-1 };
queue < pii > q;
void bfs() {
while (!q.empty()) {
pii p = q.front();
q.pop();
if (p.first.first == enx && p.first.second == eny && p.second.first == endir) {
printf("%d", p.second.second);
return;
}
//회전
int ndir1 = (p.second.first + 3) % 4;
int ndir2 = (p.second.first + 1) % 4;
if (!visited[p.first.first][p.first.second][ndir1]) {
visited[p.first.first][p.first.second][ndir1] = 1;
q.push({ {p.first.first,p.first.second},{ndir1,p.second.second + 1} });
}
if (!visited[p.first.first][p.first.second][ndir2]) {
visited[p.first.first][p.first.second][ndir2] = 1;
q.push({ {p.first.first,p.first.second},{ndir2,p.second.second + 1} });
}
//앞으로
for (int i = 1; i <= 3; i++) {
int nx = p.first.first + (dx[p.second.first])*i;
int ny = p.first.second + (dy[p.second.first])*i;
if (nx <= 0 || ny <= 0 || nx > N || ny > M || map[nx][ny] == 1) break;
if (visited[nx][ny][p.second.first] == 1)continue;
visited[nx][ny][p.second.first] = 1;
q.push({ {nx,ny},{p.second.first,p.second.second + 1} });
}
}
}
int main() {
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
scanf("%d", &map[i][j]);
}
}
scanf("%d%d%d",& stx, &sty, &stdir);
stdir = stdir-1;
if (stdir == 1)
stdir = stdir + 1;
else if (stdir == 2)
stdir = stdir - 1;
scanf("%d%d%d", &enx, &eny, &endir);
endir = endir-1;
if (endir == 1)
endir = endir + 1;
else if (endir == 2)
endir = endir - 1;
q.push({ { stx,sty }, { stdir,0 } });
bfs();
return 0;
}
** 핵심
1. 동남서북
2. 방향 조절
int dy[] = { 1,0,-1,0 }; //동0 남1 서2 북3
int dx[] = { 0,1,0,-1 };
////처음에는 동남서북으로 선언
int ndir1 = (p.second.first + 3) % 4;
int ndir2 = (p.second.first + 1) % 4;
// 동 <-> 서 ,,, 남<-->북 일때
반응형
'CS > 알고리즘' 카테고리의 다른 글
백준 1600 말이 되고픈 원숭이 (bfs , 사선) (0) | 2019.10.27 |
---|---|
백준 1260 bfs 와 dfs (0) | 2019.10.27 |
백준 5427 불 (bfs) (0) | 2019.10.01 |
백준 미세먼지 안녕 17144 (0) | 2019.09.27 |
지금까지 푼 알고리즘 문제(깃헙) (0) | 2018.11.19 |