"; for(int dir = 0 ; dir < 4; ++dir) { int nextX = current.X + dx[dir]; int nextY = current.Y + dy[dir]; if(nextX < 0 || nextX >= n // 상하크기 체크 || nextY < 0 || nextY >= m) // 좌우크기 체크 { continue; // 해당 범위를 넘는다면 그냥 넘김 } if(visit[nextX][nextY] || map[nextX][nextY] != 1) // 이미 방문했는지 체크 { continue; // 방문했다면 그냥 넘김 } // 방문 할 수 있다면 여기로 진입하게 됨 visit[nextX][nextY] = 1; Q.push(ㅁ{ nextX, nextY }); } } re"> "; for(int dir = 0 ; dir < 4; ++dir) { int nextX = current.X + dx[dir]; int nextY = current.Y + dy[dir]; if(nextX < 0 || nextX >= n // 상하크기 체크 || nextY < 0 || nextY >= m) // 좌우크기 체크 { continue; // 해당 범위를 넘는다면 그냥 넘김 } if(visit[nextX][nextY] || map[nextX][nextY] != 1) // 이미 방문했는지 체크 { continue; // 방문했다면 그냥 넘김 } // 방문 할 수 있다면 여기로 진입하게 됨 visit[nextX][nextY] = 1; Q.push(ㅁ{ nextX, nextY }); } } re"> "; for(int dir = 0 ; dir < 4; ++dir) { int nextX = current.X + dx[dir]; int nextY = current.Y + dy[dir]; if(nextX < 0 || nextX >= n // 상하크기 체크 || nextY < 0 || nextY >= m) // 좌우크기 체크 { continue; // 해당 범위를 넘는다면 그냥 넘김 } if(visit[nextX][nextY] || map[nextX][nextY] != 1) // 이미 방문했는지 체크 { continue; // 방문했다면 그냥 넘김 } // 방문 할 수 있다면 여기로 진입하게 됨 visit[nextX][nextY] = 1; Q.push(ㅁ{ nextX, nextY }); } } re">
#include <iostream>
#include <queue>

using namespace std;

#define X first // pair를 편하기 쓰도록 위한 매크로
#define Y second

int map[502][502]; // 맵최대 크기지정
bool visit[502][502]; // 맵크기에 따른 좌표 방문정보 기록

int main()
{
	int n; // 맵 상하 최대 크기
	int m; // 맵 좌우 최대 크기

	cin >> n;
	cin >> m;

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

	queue<pair<int, int>> Q;

	// 방문 초기위치를 0,0 으로 지정
	visit[0][0] = 1;
	Q.push({ 0,0 });

	while(!Q.empty())
	{
		pair<int, int> current = Q.front();
		Q.pop();

		cout << '(' << current.X << ", " << current.Y << ") -> ";
		for(int dir = 0 ; dir < 4; ++dir)
		{
			int nextX = current.X + dx[dir];
			int nextY = current.Y + dy[dir];
			if(nextX < 0 || nextX >= n  // 상하크기 체크 
				|| nextY < 0 || nextY  >= m) // 좌우크기 체크
			{
				continue; // 해당 범위를 넘는다면 그냥 넘김
			}
			if(visit[nextX][nextY] || map[nextX][nextY] != 1) // 이미 방문했는지 체크
			{
				continue; // 방문했다면 그냥 넘김
			}

			// 방문 할 수 있다면 여기로 진입하게 됨
			visit[nextX][nextY] = 1;
			Q.push(ㅁ{ nextX, nextY });
		}
	}

	return 0;
}

여기서 각 문제 맞게 수정해서 쓰면된다. bfs의 순회에 있어서 Queue를 이용한 방법의 예시