부분적으로 채워진 보드를 보여주는 Typescript 스도쿠 문제
P粉135799949
P粉135799949 2023-09-08 00:14:34
0
1
496

JS 스도쿠 생성기를 연습용 TS 생성기로 성공적으로 변환했습니다. 유일한 문제는 완전한 스도쿠 보드만 출력하도록 하는 방법입니다. 이제는 디스크 완성 여부와 관계없이 출력이 되는데, 올바른 디스크가 나타날 때까지 새로고침을 해야 합니다.

전체 디스크만 출력하도록 다음 함수를 작성하는 방법을 잘 모르겠습니다.

으아악

이것이 내 코드입니다:

function fillBoard(puzzleArray: number[][]): number[][] {
    if (nextEmptyCell(puzzleArray).colIndex === -1) return puzzleArray;

    let emptyCell = nextEmptyCell(puzzleArray);

    for (var num in shuffle(numArray)) {
      if (safeToPlace(puzzleArray, emptyCell, numArray[num])) {
        puzzleArray[emptyCell.rowIndex][emptyCell.colIndex] = numArray[num];
        fillBoard(puzzleArray);
      } 
    }

    return puzzleArray;
  }

P粉135799949
P粉135799949

모든 응답(1)
P粉638343995

빈 셀에 유효한 숫자를 추가할 수 없는 경우 이 함수는 불완전한 스도쿠 보드를 반환합니다.

이 문제를 해결하려면 함수가 다음을 수행해야 합니다.

  • 올바른 역추적 달성, 즉 실패한 이동 취소
  • 함수가 부울 값(성공/실패를 나타냄)을 반환하도록 합니다. 배열이 제자리에서 수정되어 호출자가 이러한 변경 사항에 액세스할 수 있으므로 puzzleArray를 반환할 필요가 없습니다.
    • 이것은 또한 NEW_BOARD = fillBoard(BLANK_BOARD);的副作用是NEW_BOARDBLANK_BOARD동일한 스도쿠 보드를 참조하며 더 이상 비어 있지 않음을 의미합니다(따라서 이름이 오해의 소지가 있음).
  • 성공 시 루프를 중단/복귀합니다.

다음은 수정된 구현입니다.

으아악

발신자가 반환 값을 확인해야 하지만, 백지 상태에서 시작하면 true가 반환 값으로 보장됩니다. 그러면 이렇게 할 수 있습니다:

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿