그냥 노말한 길찾기 문제임
#include <iostream>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
int arr[100][100] = { 0, };
int visit[100][100] = { 0, };
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,-1,0,1 };
int answer;
int bfs(int y, int x)
{
queue<pair<int, int>> qTemp;
qTemp.push(make_pair(y, x));//
visit[y][x] = 1;
while (!qTemp.empty())
{
int iTempy = qTemp.front().first;
int iTempx = qTemp.front().second;
qTemp.pop();
for (int i = 0; i < 4; i++)
{
int ny = iTempy+dy[i];
int nx = iTempx+dx[i];
if (ny >= 0 && ny < 100 && nx >= 0 && nx < 100)//기본 사각 바운더리
{
if ((arr[ny][nx] == 0 && visit[ny][nx] == 0) || (arr[ny][nx] == 3 && visit[ny][nx] == 0))//0이고 방문 안했으면
{
if (arr[ny][nx] == 3)
{
return 1;
}
else
{
visit[ny][nx] = 1;
qTemp.push(make_pair(ny, nx));
}
}
}
}
}
return 0;
}
void clear()
{
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
arr[i][j] = 0;
visit[i][j] = 0;
}
}
answer = 0;
}
int main() {
int test_case;
for (test_case = 0; test_case < 10; test_case++)
{
clear();
int iCnt(0);
cin >> iCnt;
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
scanf_s("%1d", &arr[i][j]);
}
}
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
if (arr[i][j] == 2)
{
answer = bfs(i, j);
}
}
}
//출력
cout << "#" << test_case+1 << " " << answer << endl;
}
//종료
return 0;
}