Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 자료구조 복습
- XSS Game
- The Loard of BOF
- HTML
- 파이썬
- SWEA
- Sookmyung Information Security Study
- PHP 웹페이지 만들기
- 숙명여자대학교 정보보안 동아리
- CSS
- lob
- hackerrank
- c++
- 머신러닝
- WarGame
- 백준
- hackctf
- BOJ
- Javascript
- 생활코딩
- 드림핵
- siss
- 숙명여자대학교 정보보안동아리
- BOJ Python
- 풀이
- Python
- c
- C언어
- 웹페이지 만들기
- 기계학습
Archives
- Today
- Total
혜랑's STORY
[BOJ_C++] 7562번: 나이트의 이동 본문
CODE
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int tc, l, result;
int dist[305][305];
int dx[8] = {1, 2, -1, -2, 1, 2, -1, -2};
int dy[8] = {2, 1, 2, 1, -2, -1, -2, -1};
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> tc;
while(tc--){
bool flag = false;
pair<int, int> start, done;
queue<pair<int, int>> q;
memset(dist, -1, sizeof(dist));
cin >> l;
cin >> start.X >> start.Y;
cin >> done.X >> done.Y;
dist[start.X][start.Y] = 0;
q.push(make_pair(start.X, start.Y));
result = 0;
while(!q.empty()){
auto cur = q.front(); q.pop();
for(int dir=0; dir<8; dir++){
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
if(cur.X == done.X && cur.Y == done.Y){
cout << dist[cur.X][cur.Y] << '\n';
flag = true; break;
}
if(nx < 0 || nx >= l || ny < 0 || ny >= l) continue;
if(dist[nx][ny] >= 0) continue;
dist[nx][ny] = dist[cur.X][cur.Y] + 1;
q.push(make_pair(nx, ny));
}
if(flag) break;
}
}
return 0;
}
풀이
- 나이트가 움직일 수 있는 경우의 수는 8가지이다.
- 처음 시작 위치를 큐에 넣고 BFS 탐색을 진행하며 이동하려는 칸일 시 움직인 횟수를 출력하고 탐색을 종료한다.
결과
'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
[BOJ_C++] 5427번: 불 (0) | 2022.10.10 |
---|---|
[BOJ_C++] 7569번: 토마토 (0) | 2022.10.06 |
[BOJ_C++] 7576번: 토마토 (0) | 2022.10.06 |
[BOJ_C++] 10026번: 적록색약 (0) | 2022.10.05 |
[BOJ_C++] 3986번: 좋은 단어 (0) | 2022.09.30 |