https://www.acmicpc.net/problem/25417


Baekjoon Online JudgeBaekjoon Online Judgewww.acmicpc.net




bfs문제인데

코드이상하게 짠거 같아


예제1이 2로 나오는데

에제2는 3으로 맞게 나와


고쳐야되는 부분 알려줘


#include <iostream>

#include <queue>

#include <tuple>

using namespace std;


int r, c;

int dist[6][6];

int dx[4] = { 1, 0, -1, 0 };

int dy[4] = { 0, 1, 0, -1 };


int bfs(int x, int y) {

queue<tuple<int, int, int>> que;

que.push(make_tuple(x, y, 0));

while (!que.empty()) {

auto cur = que.front(); que.pop();

int curX, curY, curM; tie(curX, curY, curM) = cur;


for (int dir = 0; dir < 4; dir++) {

int nx = curX + dx[dir];

int ny = curY + dy[dir];

if (nx < 0 || nx >= 5 || ny < 0 || ny >= 5) continue;

if (dist[nx][ny] == -1) continue;

if (dist[nx][ny] == 1) {

while (!que.empty()) { que.pop(); }

return curM;

}

dist[nx][ny] == -1;

que.push({ nx, ny, curM + 1 }); //한칸씩 이동

while (nx >= 0 && nx < 5 && ny >= 0 && ny < 5 ) {

if (dist[nx][ny] == -1) {

nx -= dx[dir]; ny -= dy[dir];

que.push({ nx, ny, curM + 1 });

dist[nx][ny] = -1;

break;

}

if (dist[nx][ny] == 7 || nx == 0 || nx == 4 || ny == 0 || ny == 4) {

que.push({ nx, ny, curM + 1 }); //고속이동

dist[nx][ny] = -1;

break;

}

else {

nx += dx[dir];

ny += dy[dir];

}

}

}

}

return -1;

}


int main() {

ios::sync_with_stdio(0);

cin.tie(0);


for (int i = 0; i < 5; i++) {

for (int j = 0; j < 5; j++) {

cin >> dist[i][j];

}

}

cin >> r >> c;

cout << bfs(r, c);

}