Algorithm problem-25

11435 ワード

  • MxN行列から始点から目標までの最小移動時間
  • が戻る.
  • 1は障害物、0は可動通路
  • を表す.
  • ロボット毎分1コマ
  • 移動可能
  • ビュー
  • 移動可能な数、
  • すべての場合にカウントを移動し、結果配列にカウントを保存する
  • .
  • は、その最小値を返すように構想する:
  • の問題を理解し、上述のように首都コードと解決策の乖離を実施すると考えられる
  • 他の方向を考慮するタイムアウト
  • .
  • 雷探しゲームのような方法で問題を解決しよう
  • は、最初に所与の行列のうち1で示す障害値を任意のテキストに置き換える、
  • .
  • の始点から離れるたびに、位置の値が以前の値+1に変更され、アレイ全体の0値、
  • が変更されます.
  • 置換中にゼロ以外の値が発生すると、置換値を現在の値より小さい値
  • に変更する.
  • すべてのシナリオを変更し、到着点の結果値を返します.
  • 以下に編成し、方法の誤りを認識し、最終的に報告書を見て理解することにした.
  • ビュー
  • const robotPath = function (room, src, dst) {
      // room에 위치한 1의 값을 임의의 텍스트 값('')으로 교체
      for (let i = 0; i < room.length; i++) {
        for (let j = 0; j < room[i].length; j++) {
          if (room[i][j] === 1) {
            room[i][j] = '';
          }
        }
      }
      // src의 값을 's'로 변경
      let [r,c] = src;
      room[r][c] = 's';
      // 모든 배열의 값이 0이 아닐때까지 변경, 그러기 위한 배열의 0의 수를 카운트 하는 함수를 작성
      let cnt = 0;
      // 시작점에서 출발하며 상하좌우의 위치가 유효하다면, 값을 +1씩 바꾼다
    };
  • レポート
  • const robotPath = function (room, src, dst) {
      // 현재 위치를 중심으로 4방향의 값을 현재값 +1로 바꿔주는 함수를 구현하자
      const stepper = (m, n, now, step) => {
        // 현재 위치를 좌표값으로 옮겨 담는다
        const [r, c] = now;
        // 배열의 범위를 벗어난 경우
        if (r < 0 || r >= m || c < 0 || c >= n) return;
        // 0이거나, 현재 스탭보다 값이 크다면, 현재 스탭값으로 변경시킨다
        if (room[r][c] === 0 || room[r][c] > step) {room[r][c] = step;}
        // 그 외, 장애물(1)이거나, 현재 스탭보다 작은(최소 시간으로 통과한) 경우
        else {return;}
        // 4방향을 탐색, dfs로 진행한다, 완전탐색을 진행하므로 bfs도 큰 차이는 없지만
        // 도착지에 최소값으로 도달한 경우 종료되게 코드를 작성할 수 있으면 약간 더 효율적임
        // 아래의 경우를 재귀하여 탐색하게 되면, 범위 내의 모든 값을 최대 4회씩 퍼져 나가면서 탐색하게 됨
        // 종료 시점은 모든 범위 내에서 4회의 시도를 한 경우가 될 것이고, 범위 밖에서는 진행이 되지 않으므로
        // 자동적으로 종료가 된다
        stepper(m, n, [r + 1, c], step + 1);
        stepper(m, n, [r - 1, c], step + 1);
        stepper(m, n, [r, c + 1], step + 1);
        stepper(m, n, [r, c - 1], step + 1);
      };
      // 현재 위치의 값을 1로 시작해야 시작점으로 되돌아오지 않는다
      // 계산이 완료된 후에, 도착지점의 값에서 -1을 해주면 올바른 값이 된다
      stepper(room.length, room[0].length, src, 1);
      const [row, col] = dst;
      return room[row][col] - 1;
    }