Computer >> 컴퓨터 >  >> 프로그램 작성 >> 프로그램 작성

하노이 타워 문제


하노이 탑은 퍼즐 문제입니다. 3개의 스탠드와 n개의 디스크가 있는 곳입니다. 처음에는 디스크가 첫 번째 스탠드에 배치됩니다. 세 번째 또는 대상 스탠드에 디스크를 배치해야 합니다. 두 번째 또는 보조 스탠드는 보조 스탠드로 사용할 수 있습니다.

  • 그러나 따라야 할 몇 가지 규칙이 있습니다.
  • 각 동작에 대해 하나의 디스크만 전송할 수 있습니다.
  • 가장 높은 디스크만 스탠드에서 픽업할 수 있습니다.
  • 더 큰 디스크는 더 작은 디스크 위에 놓이지 않습니다.

이 문제는 재귀로 쉽게 해결할 수 있습니다. 처음에는 재귀를 사용하여 상위(n-1) 디스크를 소스에서 보조 스탠드로 배치한 다음 마지막 디스크를 소스에서 대상으로 배치한 다음 재귀에 의해 보조 스탠드에서 대상 스탠드(n-1) 디스크를 다시 배치합니다.

입력 및 출력

입력:디스크 수:3출력:1. 디스크 1을 A에서 C2로 이동합니다. 디스크 2를 A에서 B3으로 이동합니다. 디스크 1을 C에서 B4로 이동합니다. 디스크 3을 A에서 C5로 이동합니다. 디스크 1을 B에서 A6으로 이동합니다. 디스크 2를 B에서 C7으로 이동합니다. 디스크 1을 A에서 C로 이동

알고리즘

toh(n, s, a, d)

입력: 디스크 수, 소스, 보조, 대상.

출력: 적절한 규칙을 유지하면서 소스에서 대상으로 디스크를 이동하는 단계입니다.

n =1이면 시작하고 s에서 d로 이동 디스크 표시 toh(n-1, s, d, a) s에서 d로 이동 디스크 표시 toh(n-1, a, s, d)End 

예시

#include네임스페이스 사용 std;void TOH(int n, char s, char a, char d) { static int count =0; //카운트 수 저장 if(n ==1) { count++; cout <> n; TOH(n, 'A','B','C');}

출력

디스크 수 입력:31. 디스크 1을 A에서 C2로 이동합니다. 디스크 2를 A에서 B3으로 이동합니다. 디스크 1을 C에서 B4로 이동합니다. 디스크 3을 A에서 C5로 이동합니다. 디스크 1을 B에서 A6으로 이동합니다. 디스크 2를 B에서 C7으로 이동합니다. 디스크 1을 A에서 C로 이동