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 |
Tags
- 풀이
- Node.js
- Stack
- 부르트포스
- Docker
- ReLU
- 실버쥐
- mysql
- BFS
- dfs
- 그리디
- 알고리즘
- Algorithm
- Greedy
- DeepLearning
- NeuralNetwork
- ios
- 백준
- 프로그래머스
- Swift
- C++
- 캡스톤정리
- sigmoid
- 그래프
- 문제풀이
- 탐색
- dp
- 플로이드와샬
- Blockchain
- 백트래킹
Archives
- Today
- Total
개발아 담하자
[백준/C++] 7562번 : 나이트의 이동 풀이 본문
문제 7562 번 : 나이트의 이동
문제 링크 : https://www.acmicpc.net/problem/7562
문제
체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까?
입력
입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다.
각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. 체스판의 각 칸은 두 수의 쌍 {0, ..., l-1} × {0, ..., l-1}로 나타낼 수 있다. 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다.
출력
각 테스트 케이스마다 나이트가 몇 번만에 이동할 수 있는지 출력한다.
오랜만에 풀어보는 BFS 문제이다.
나이트의 이동 경로에 따른 dy, dx 값만 제대로 넣어준다면 큰 무리 없이 풀 수 있는 무난한 문제이다.
풀이
#include <iostream>
#include <queue>
using namespace std;
int n, x1, y1, x2, y2;
const int dy[8]={-1,-2,-2,-1,1,2,1,2};
const int dx[8]={-2,-1,1,2,-2,-1,2,1};
void bfs(){
int visited[301][301] = {false,};
queue <pair<int,pair<int,int>>> que;
que.push(make_pair(0, make_pair(y1, x1)));
visited[y1][x1] = true;
while(!que.empty()){
int cnt = que.front().first;
auto now = que.front().second;
int y = now.first;
int x = now.second;
que.pop();
if(y==y2 && x==x2) {
cout << cnt << endl;
break;
}
for(int i=0; i<8; i++){
int ny = y + dy[i];
int nx = x + dx[i];
if(ny<0|| nx<0|| ny>=n || nx>=n) continue;
if(visited[ny][nx]) continue;
visited[ny][nx] = true;
que.push(make_pair(cnt+1, make_pair(ny, nx)));
}
}
}
int main(void){
int t;
cin >> t;
for(int i=0; i<t; i++){
cin>>n;
cin >> x1 >> y1;
cin >> x2 >> y2;
bfs();
}
return 0;
}
풀이 인증
'👩💻 알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준/C++] 1389 번 : 케빈 베이컨의 6단계 법칙 풀이 (0) | 2020.02.04 |
---|---|
[백준/C++] 10026 번 : 적록색약 풀이 (0) | 2020.02.03 |
[백준/C++] 2468번 : 안전 영역 풀이 (0) | 2020.02.02 |
[백준/C++] 2583번 : 영역 구하기 풀이 (0) | 2020.02.02 |
[백준/C++] 11724번 : 연결 요소의 개수 풀이 (0) | 2020.02.02 |