[BOJ]5014開始リンク|BFS
Problem | 開始リンク
変数の説明
F:建物の最上階
私が今いるフロア
G:行くフロア
U:上のレイヤー
D:下降可能層
アクセスしたノードがアクセスしなくなりました
(既存層+U)、(既存層-D)建物の層範囲に適合すること.
二つの条件を考えればいい.
最終的な答えはBFSのレベルです.
flag値が変化しない場合は見つかりませんが、while文を終了するので、「use the sta階段」を出力します.
アクセス方法
変数の説明
F:建物の最上階
私が今いるフロア
G:行くフロア
U:上のレイヤー
D:下降可能層
アクセスしたノードがアクセスしなくなりました
(既存層+U)、(既存層-D)建物の層範囲に適合すること.
二つの条件を考えればいい.
最終的な答えはBFSのレベルです.
flag値が変化しない場合は見つかりませんが、while文を終了するので、「use the sta階段」を出力します.
-✔」完全コード
const { log } = require("console");
const fs = require("fs");
const { isBuffer } = require("util");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
let [F,S,G,U,D]=input[0].split(' ').map(Number);
let visited=new Array(F+1).fill(false);
let time=0;
let flag=true;
function BFS(){
let queue=[];
queue.push(S);
visited[S]=true;
while(queue.length){
let len=queue.length;
for(let i=0;i<len;i++){
let x=queue.shift();
if(x===G){
flag=false;
break;
}
// up 누른 경우의 체크
if((x+U) <= F && visited[x+U]===false){
// 범위 안에 맞고, 방문하지 않은 노드일 때
queue.push(x+U);
visited[x+U]=true;
}
if((x-D)>=1 && visited[(x-D)]===false){
queue.push(x-D);
visited[x-D]=true;
}
}
if(!flag) break;
time++;
}
}
BFS();
if(!flag) console.log(time);
else console.log("use the stairs");
Reference
この問題について([BOJ]5014開始リンク|BFS), 我々は、より多くの情報をここで見つけました https://velog.io/@mingsomm/BOJ-5014-스타트링크テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol