공부/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 사용