[伯俊]16174号跳躍王
[伯俊]16174号跳躍王
質問リンク:https://www.acmicpc.net/problem/16174
質問する
にゅうしゅつりょく
質問へのアクセス
これはグラフ探索問題です.
bfsを用いて問題を解決した.
各位置の数字に基づいて、右と下のパスをチェックし、できれば対応するノードを追加します.(N−1,N−1)ノードに到達した場合、true、到達しなかった場合falseが出力される.
コード実装(C++)
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int N;
int map[64][64];
int check[64][64];
int moveX[2] = {0,1};
int moveY[2] = {1,0};
bool bfs(){
queue<pair<int,int> > q;
check[0][0] = true;
q.push(make_pair(0,0));
while(!q.empty()){
int x = q.front().first; int y = q.front().second;
q.pop();
if(map[y][x] == -1) return true;
for(int i = 0 ; i < 2 ; i++){
int nextX = x + moveX[i]*map[y][x]; int nextY = y + moveY[i]*map[y][x];
if(nextX >= N || nextY >= N || check[nextY][nextX]) continue;
check[nextY][nextX] = true;
q.push(make_pair(nextX,nextY));
}
}
return false;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for(int i = 0 ; i < N ; i++){
for(int j = 0 ; j < N ; j++){
cin >> map[i][j];
}
}
memset(check, false, sizeof(check));
if(bfs()) cout << "HaruHaru\n";
else cout << "Hing\n";
}
Reference
この問題について([伯俊]16174号跳躍王), 我々は、より多くの情報をここで見つけました
https://velog.io/@kpg0518/백준-16174번-점프왕-쩰리-Large
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int N;
int map[64][64];
int check[64][64];
int moveX[2] = {0,1};
int moveY[2] = {1,0};
bool bfs(){
queue<pair<int,int> > q;
check[0][0] = true;
q.push(make_pair(0,0));
while(!q.empty()){
int x = q.front().first; int y = q.front().second;
q.pop();
if(map[y][x] == -1) return true;
for(int i = 0 ; i < 2 ; i++){
int nextX = x + moveX[i]*map[y][x]; int nextY = y + moveY[i]*map[y][x];
if(nextX >= N || nextY >= N || check[nextY][nextX]) continue;
check[nextY][nextX] = true;
q.push(make_pair(nextX,nextY));
}
}
return false;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for(int i = 0 ; i < N ; i++){
for(int j = 0 ; j < N ; j++){
cin >> map[i][j];
}
}
memset(check, false, sizeof(check));
if(bfs()) cout << "HaruHaru\n";
else cout << "Hing\n";
}
Reference
この問題について([伯俊]16174号跳躍王), 我々は、より多くの情報をここで見つけました https://velog.io/@kpg0518/백준-16174번-점프왕-쩰리-Largeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol