코딩테스트

[백준] 온라인 저지 2178번 : 미로 탐색(C++), DFS

yeonii_ 2025. 4. 9. 18:08

https://www.acmicpc.net/problem/2178

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int dy[4] = { -1, 0 , 1, 0 };
int dx[4] = { 0 , -1 , 0, 1 };
int N, M;

void dfs(vector<vector<int>>& Maze, vector<vector<bool>>& Visited, int y, int x, int count, int& answer)
{
	Visited[y][x] = true;
	if (y == N - 1 && x == M - 1)
	{
		if (count < answer || answer== -1)
			answer = count;
	}
	
	for (int i = 0; i < 4; ++i)
	{
		int ny = y + dy[i];
		int nx = x + dx[i];

		if (ny < 0 || nx < 0 || ny >= N || nx >= M) continue;

		if (Maze[ny][nx] == 1 && Visited[ny][nx] == false)
		{
			dfs(Maze, Visited, ny, nx, count + 1, answer);
		}
	}
	Visited[y][x] = false;
}


int main()
{
	cin >> N >> M;

	vector<vector<int>> Maze(N, vector<int>(M));
	vector<vector<bool>> Visited(N, vector<bool>(M, false));
	char Input;
	for (int i = 0; i < N; ++i)
	{
		for (int j = 0; j < M; ++j)
		{
			cin >> Input;
			if (Input == '1') Maze[i][j] = 1;
			else Maze[i][j] = 0;
		}
	}

	int answer = -1;
	dfs(Maze, Visited, 0, 0, 1, answer);
	cout << answer << endl;
}

DFS는 시간초과 발생 BFS로 다시 풀어보기