[伯俊]1987アルファベット-javascript
📌 質問する
https://www.acmicpc.net/problem/1987
📌 に答える
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
let [R, C] = input[0].split(" ").map(Number);
let board = new Array(R);
for (let i = 0; i < board.length; i++) {
board[i] = input[i + 1].trim().split("");
}
let visit = new Array(26).fill(false);
let ans = 0;
let dx = [0, 0, 1, -1];
let dy = [1, -1, 0, 0];
function DFS(x, y, cnt) {
ans = Math.max(ans, cnt);
for (let i = 0; i < 4; i++) {
let nx = x + dx[i];
let ny = y + dy[i];
if (nx >= 0 && ny >= 0 && nx < R && ny < C) {
if (visit[board[nx][ny].charCodeAt() - 65] === false) {
visit[board[nx][ny].charCodeAt() - 65] = true;
DFS(nx, ny, cnt + 1);
visit[board[nx][ny].charCodeAt() - 65] = false;
}
}
}
}
visit[board[0][0].charCodeAt() - 65] = true;
DFS(0, 0, 1);
console.log(ans);
✔アルゴリズム:DFS、遡及let visit = new Array(26).fill(false);
✔のようなアルファベットは再アクセスできないので、座標でアクセス配列を設定するのではなく、アルファベットの個数でアクセス配列を設定しています.✔最初のセルboard[0][0]から開始する必要がありますので、アクセス処理とDFSブラウズが必要です.
✔DFS関数で、現在のボード範囲内でアクセスされていないアルファベットであれば、アクセス処理を行い、cnt 1を増やし、DFS検索を継続します.DFSナビゲーションが完了したら、再度アクセス処理を無効にします.
❗c++
visit[board[nx][ny] - "A"] === false
検査を体現し、アクセス処理を行わなかった. visit[board[nx][ny].charCodeAt() - 65]
javascriptでは、charcodeat関数でaskiコードに変換する必要がある場合があります.✔難易度:標準プラチナ4
Reference
この問題について([伯俊]1987アルファベット-javascript), 我々は、より多くの情報をここで見つけました https://velog.io/@ywc8851/백준-1987-알파벳-javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol