"; 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를 이용한 방법의 예시