공부/SWEA
SWEA 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (C++)
밤톨ㅇl
2024. 5. 15. 18:30
#include <stdio.h>
#include <queue>
using namespace std;
int N;
queue<pair<int, int>> q;
int map[101][101];
int visited[101][101];
bool flag;
int dx[4] = {1, -1, 0};
int dy[4] = {0, 0, 1};
void initialize()
{
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
visited[i][j] = 0;
}
}
}
void solve(int x, int y)
{
visited[y][x] = 1;
q.push(make_pair(x, y));
while (!q.empty())
{
int cntx = q.front().first;
int cnty = q.front().second;
q.pop();
for (int i = 0; i < 3; i++)
{
int nx = dx[i] + cntx;
int ny = dy[i] + cnty;
if (nx < 0 || ny < 0 || nx >= 100 || ny >= 100 || !map[ny][nx] || visited[ny][nx])
continue;
if (map[ny][nx] == 1)
q.push({ nx, ny });
else if (map[ny][nx] == 2)
flag = true;
visited[ny][nx] = map[ny][nx];
break;
}
}
}
int main()
{
for (int t = 1; t <= 10; t++)
{
int tc;
scanf("%d", &tc);
flag = false;
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
scanf("%d", &map[i][j]);
}
}
for (int i = 0; i < 100; i++)
{
solve(i, 0);
if (flag)
{
printf("#%d %d\n", t, i + 1);
break;
}
initialize();
}
}
}
1. bfs 사용