반응형
입력이 개행없이 주어지므로 string으로 받아야 함.
그거 말고는 간단.
#include<iostream>
#include<string.h>
using namespace std;
char arr[100][100];
bool visit[100][100];
bool flag;
int posy, posx ,starty,startx;
void move(int y, int x)
{
if (y == posy && x == posx)
{
flag = true;
return;
}
if (y + 1 < 100)
{
if (!visit[y + 1][x] && (arr[y+1][x] == '0' || arr[y + 1][x] == '3'))
{
visit[y + 1][x] = true;
move(y + 1, x);
visit[y + 1][x] = false;
}
}
if (y - 1 >= 0)
{
if (!visit[y - 1][x] && (arr[y - 1][x] == '0' || arr[y - 1][x] == '3'))
{
visit[y - 1][x] = true;
move(y - 1, x);
visit[y - 1][x] = false;
}
}
if (x + 1 < 100)
{
if (!visit[y][x + 1] && (arr[y][x+1] == '0' || arr[y][x+1] == '3'))
{
visit[y][x+1] = true;
move(y ,x+1);
visit[y][x+1] = false;
}
}
if (x - 1 >= 0)
{
if (!visit[y][x - 1] && (arr[y][x-1] == '0' || arr[y][x-1] == '3'))
{
visit[y][x - 1] = true;
move(y , x - 1);
visit[y][x - 1] = false;
}
}
}
int main(int argc, char** argv)
{
int test_case;
for (test_case = 1; test_case <= 10; ++test_case)
{
int tc;
cin >> tc;
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
cin >> arr[i][j];
if (arr[i][j] == '3')
{
posy = i;
posx = j;
}
else if (arr[i][j] == '2')
{
starty = i;
startx = j;
}
}
}
memset(visit, 0, sizeof(visit));
flag = false;
move(starty, startx);
if (flag)
{
cout << "#" << test_case << " " << 1 << endl;
}
else
{
cout << "#" << test_case << " " << 0 << endl;
}
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
반응형
'Algorithm' 카테고리의 다른 글
5656. [모의 SW 역량테스트] 벽돌 깨기 (0) | 2020.03.31 |
---|---|
SW 5644. [모의 SW 역량테스트] 무선 충전 (0) | 2020.03.30 |
SW 2105. [모의 SW 역량테스트] 디저트 카페 (0) | 2020.03.27 |
SW 1953. [모의 SW 역량테스트] 탈주범 검거 (0) | 2020.03.27 |
1949. [모의 SW 역량테스트] 등산로 조성 (0) | 2020.03.26 |