>백엔드 개발 >C++ >C/C++로 숫자 연결 게임을 하시나요?

C/C++로 숫자 연결 게임을 하시나요?

WBOY
WBOY앞으로
2023-09-18 08:41:02856검색

C/C++로 숫자 연결 게임을 하시나요?

게임 - n × n 정사각형 배열이 있다고 가정합니다. 그 중 어떤 사각형은 비어 있고, 어떤 사각형은 속이 꽉 차 있고, 어떤 사각형이 아닌 사각형은 정수 1, 2, 3,...으로 설정되어 있습니다. 각 정수는 보드에서 정확히 두 개의 서로 다른 사각형을 보유하거나 점유합니다. 플레이어의 임무는 수평 및 수직 이동만 구현하는 간단한 경로를 사용하여 보드에 있는 각 정수의 두 발생을 연결하는 것입니다. 서로 다른 두 경로는 서로 교차할 수 없습니다. 어떤 경로에도 솔리드 블록이 포함될 수 없습니다. 솔리드 블록은 어떤 경로에서도 허용되지 않습니다. 마지막으로, 모든 비고체 사각형은 경로로 채워져야 합니다.

알고리즘 - 주어진 보드 크기 n × n으로 효율적인 무작위 퍼즐을 구성하기 위해 먼저 칠판에 무작위의 단순하고 서로 분리된 경로를 생성합니다. 일부 격리된 블록이 여전히 생성된 모든 경로 외부에 있는 경우 이러한 격리된 블록을 솔리드(금지됨)로 표시합니다. 다음으로 경로의 끝점과 퍼즐로 채워진 사각형 목록을 제공합니다.

그래서 먼저 솔루션을 생성한 다음 해당 솔루션을 기반으로 퍼즐을 계산합니다. 경로와 단색 사각형은 n × n 플레이트를 분리합니다. 우리는 이 파티션을 생성하기 위한 데이터 구조를 구현하고 찾습니다. 데이터 구조는 체스판의 n^2 정사각형 집합의 하위 집합을 처리합니다.

Pseudocode

  • 사각형 (a, b)와 (c, d)를 체스판에 무작위로 배치하여 -

    • (a, b)와 (c, d)가 서로의 이웃이 되도록 하고, 그리고

    • (a, b)나 (c, d)는 지금까지 생성된 경로에 속하지 않습니다. 만약에 전체 보드, FAILURE 반환 /* 여기서 (a​​, b) 및 (c, d)는 새 경로의 처음 두 사각형입니다. 설립하다. */

  • 다음을 포함하는 두 합집합 검색 트리의 합집합 (a, b) 및 (c, d).

  • 현재 경로가 확장될 때까지 반복 -

      (a, b) = (c, d)로 이름을 바꿉니다.

  • -

    • (c, d)가 지금까지 생성된 경로(현재 경로 포함)에 속하지 않도록 무작위로 인접한 사각형 (c, d) (a, b)를 찾습니다.

    • 부분 구축의 현재 경로에 있는 유일한 이웃(c, d)는 (a, b)입니다.

  • 이러한 이웃 (c, d)가 발견되지 않으면 경로를 더 이상 확장할 수 없으므로 순환이 깨집니다.

  • 그렇지 않으면 두 (a, b)와 (c, d)가 다음에 속합니다. 그리고 나무를 찾아보세요.

  • 새 경로의 시작과 끝에 있는 두 블록의 끝점 플래그를 설정합니다.

  • 성공으로 돌아가기

  • 위 내용은 C/C++로 숫자 연결 게임을 하시나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제