내가 난독증인가... ㅜ ㅜ
1) 상하좌우로 움직인다는 말이 없음. 대각선으로도 움직일 수 있는디??!!
2) 이동거리에 대해서도 의문임. 시작할 때는 0부터 시작해야 하는게
맞는데 .. 문제를 읽어보면 이상함. 저기가 왜 6이 나오는지??
아래 그림을 보고 뭔소리야 했는데
빨간색 부분에서 거리가 어떻게 6이 나올수 있는거지???
a는 왼쪽 아래 점??? 이 아닌데??? ㅋㅋ
왼쪽 아래 점이 도대체 어느 부분을 가리키는지 알 수 없지만..
왼쪽 아래를 1로 두고 진행하면, 위의 거리 6 6 6 8 8 10 6 에 도달가능한 경로는 도출할 수 있음.
-> bfs가 아님, 백트래킹임.
#include <iostream>
#include <vector>
using namespace std;
#include <algorithm>
#include <queue>
#include <string>
// 1189 컴백홈
// 15:36 ~
// 상하좌우
int dy[]{ -1,1,0,0 };
int dx[]{ 0,0,-1,1 };
int r, c, k;
void bfs(vector<vector<char>>&v ,int y , int x
,vector<vector<int>>&visited)
{
int destY = 0;
int destX = c - 1;
if (v[y][x] == 'T')
{
return;
}
queue<pair<int, int>>q;
q.push(make_pair(y, x));
visited[y][x] = 0;
while (!q.empty())
{
int curY = q.front().first;
int curX = q.front().second;
q.pop();
if (curY == destY && curX == destX)
continue;
for (int i = 0; i < 4; ++i)
{
int nextY = curY + dy[i];
int nextX = curX + dx[i];
if (nextY < 0 || nextY >= r
|| nextX < 0 || nextX >= c)
{
continue;
}
if (visited[nextY][nextX] != -1 )
continue;
if (v[nextY][nextX] == 'T')
continue;
visited[nextY][nextX] = visited[curY][curX] + 1;
q.push(make_pair(nextY, nextX));
}
}
}
int main()
{
// bfs 처리를 하면서
// 오른쪽 위까지 진행하면서 거리가 k일 때 카운팅을 하자.
// 이동할 수 있는 부분은 '.'으로 되어 있는 원소
cin >> r >> c >> k;
vector<vector<char>>v(r, vector<char>(c));
for (int i = 0; i < r; ++i)
{
string s;
cin >> s;
for (int j = 0; j < c; ++j)
{
v[i][j] = s[j];
}
}
vector<vector<int>>visited(r, vector<int>(c, -1));
// 시작점은 왼쪽 위부분임.
bfs(v, r - 1, 0, visited);
for (int i = 0; i < r; ++i)
{
for (int j = 0; j < c; ++j)
{
cout << visited[i][j] << " ";
}
cout << endl;
}
}