utility 헤더에 있는 pair두 자료구조를 묶어서 값을 넣어줄 수 있음.
대소 관계가 설정되어있어 알아서 앞의 값을 비교하고 그 다음 뒤의 값을 비교함.
pair<int,int> t1 = make_pair(10,13); // 값 초기화
pair<int,int> t2 = {4,6}; // C++ 11 이상
cout << t2.first << ' ' << t2.second //값의 접근
BFS는 정석적인 구현 형태가 있어서 숙달하고 있는 것이 중요하다.
int board[502][502] = {};
bool vis[502][502];
int n = 7, m = 10;
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
queue<pair<int, int>> Q;
vis[0][0] = 1;
Q.push({0,0});
while(!Q.empty()) {
pair<int, int> cur = Q.front(); Q.pop();
for(int dir = 0; dir < 4; dir++) {
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue; //열의 범위를 넘어가는 경우에는 시행하지 않는다.
if(vis[nx][ny] || board[nx][ny] != 1) continue; //이미 방문했거나 1이 아닌 경우에도 Q에 푸쉬 하지 않는다.
vis[nx][ny] = 1; //board[nx][ny] 값이 1인 경우 방문했다는 표시 후에
Q.push({nx,ny}); //큐에 값을 추가한다 (다음 순회를 위한)
}
}