アルゴリズムの問題-JavaScriptのバックトレースパターン
次のバックトレースの問題を考えてみましょう。2次元グリッドには、4種類の正方形があります-
-
1は開始正方形を表します。開始する正方形は1つだけです。
-
2は終了正方形を表します。終了する正方形は1つだけです。
-
0は、歩くことができる空の正方形を表します。
-
-1は、私たちが歩くことができない障害物を表します。
開始正方形から終了正方形までの4方向の歩行回数を返す関数を作成する必要があります。この関数は、障害物のないすべての正方形を1回だけ通過します。
例
const arr = [
[1,0,0,0],
[0,0,0,0],
[0,0,2,-1]
];
const uniquePaths = (arr, count = 0) => {
const dy = [1,−1,0,0], dx = [0,0,1,−1];
const m = arr.length, n = arr[0].length;
const totalZeroes = arr.map(row => row.filter(num => num ===
0).length).reduce((totalZeroes,nextRowZeroes) => totalZeroes +
nextRowZeroes, 0);
const depthFirstSearch = (i, j, covered) => {
if (arr[i][j] === 2){
if (covered === totalZeroes + 1) count++;
return;
};
for (let k = 0; k < 4; k++)
if (i+dy[k] >= 0 && i+dy[k] < m && j+dx[k] >= 0 && j+dx[k] < n
&& arr[i+dy[k]][j+dx[k]] !== −1 ){
arr[i][j] = −1;
depthFirstSearch(i+dy[k],j+dx[k],covered+1);
arr[i][j] = 0;
}
return;
};
for (let row = 0; row < m; row++)
for (let col = 0; col < n; col++)
if (arr[row][col] === 1){
arr[row][col] = −1;
depthFirstSearch(row,col,0);
break;
}
return count;
};
console.log(uniquePaths(arr)); 説明
-
グリッドをトラバースするときに4方向の反復を容易にする変数を設定し、再帰の基本条件に達したときにカバレッジをチェックできるようにマトリックス内のゼロをカウントします
-
次に、DFS(Depth First Search)バックトラック機能を設定して、アクティブパス上でグリッドに-1をマークし、フィニッシュセルに到達したときにパスの長さをチェックします
-
最後に、開始セルからDFSを起動して、すべてのフルパスをカウントし、カウントを返します
出力
そして、コンソールの出力は-
になります2
-
JavaScriptのデバッガーステートメント
JavaScriptのデバッガーステートメントは、コードにブレークポイントを設定するために使用されます。コードは、デバッガーステートメントに遭遇するとすぐに実行を停止し、デバッガー関数(使用可能な場合)を呼び出します。 以下は、JavaScriptでデバッガステートメントを実装するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" co
-
JavaScriptの番号パターン
ユーザーにテキスト入力とボタンを提供するJavaScriptおよびHTMLプログラムを作成する必要があります。ユーザーが入力に任意の値(たとえば5)を入力してボタンをクリックすると、画面に次のパターンが印刷されます。 (n =5の場合) 01 01 02 01 02 03 01 02 03 04 01 02 03 04 05 例 このためのコードは-になります <html> <head> <title>JavaScript Number Patterns</title> <script type="text/javascrip