하노이 문제 해결 문제 J의 OCAC 여름 두 번째 게임 타워

하노이 타워
[제목] 설
하노이 타워 형성 인도 전설 수학 문제 세 자극 A, B, C, A 갖는 N 극 디스크 천공, 아래에서 위로 순차적으로 작은 디스크 크기와.
: 모든 디스크를 바 것이다 다음과 같은 규칙에 따라 요구 사항은 C로 이동
      당신은 하나 개의 디스크로 이동할 수 있습니다 1.
      위의 시장은 작은 모자 적재 할 수없는 2.
얼마나 많은 시간을 이동, 이동 및 인쇄 솔루션을하기위한 최소 필요를 찾을 수 있습니다.
[입력 형식
정수, n은 (1 <= N <= 15), 제 바 A는 디스크의 수를 나타낸다.
[] 출력 형식
의 첫 번째 행의 최소 이동을 출력하는 횟수.
제 (예를 들면, C에 최상 디스크 레버로드의 이동 출력은 "C에 이동") 번 라인 움직임 당 인쇄 다음.
[입력] 샘플
3
[]의 샘플 출력
. 7
C로 이동 A를
B로 이동 A를
B로 이동 C를
C로 이동 A를
A를 이동 B를
C로 이동 B
C로 이동 A를
여기서 TITLE] 분석
재귀이 질문 알고리즘에 관한 것이다.
우리는 DFS 기능 (숯 A, B 숯 열 숯 C, INT 않음)를
그 나타낸다 : n 개의 디스크 C. A와 B로 이동할
1시 N ==, 우리는 출력을 할 때 그래서는 "C에 이동".
n이> 1, 우리가 생각할 수
I는 C A에서 가장 큰 디스크 이동을 원하는 경우, 다른 제 우리는 행 (C 통해) N-1 디스크 필요 후, B에 출력 이동 "C로 이동"다음 (a를 통해) 이동의 B-B의 n-1 개의 디스크에 C.
그래서 DFS (숯불 A, 숯불 B, 달성하기 위해 숯불 C, INT n)도 완벽하게 언어의 구문과 일치하지 않는 의사 코드 (의사 코드를,하지만 당신은 문법을 이해할 수있다, 그것은 보였다 왕 선생님 Huzhou의 인 것처럼 그러나 다음과 같은) 항을 이해할 수있는 바와 같이 :
DFS (A, B, C를 N-)
    그때 출력하는 N IF - == 0 "이동"II.A "를".C.
    다른 :
        DFS (A, C, B .) 1-N-
        . 출력의 "이동"은 II.A .C "를"
        DFS (B, A, C 1-N- ,.)
다음 코드는 :

#INCLUDE <비트 / stdc ++ H.> 
네임 스페이스를 사용하여 표준; 

보이드 출력 (숯 A, 숯 B) { 
    의 printf ( "%의 C \ 없음 중량 %의 C를 이동"A, B); 
} 

공극 MOV (숯 A, B 숯, 숯 C, INT 않음) {// A¾¹ýBÒƶ¯μ½C 
    경우 (N == 1)의 출력 (A, C); 
    또 { 
        MOV (A, C, B, N-1); 
        출력 (A, C); 
        MOV (B, A, C, N-1); 
    }는 
} 

N INT, ANS; 

INT의 main () { 
    CIN >> N; 
    ANS = 1; 
    경우 (; 나는 = <N; i가 2 = int로 난 ++) ANS = ANS * 2 + 1; 
    COUT << ANS << ENDL; 
    MOV ( 'A', 'B', 'C', N); 
    0을 반환; 
}

 

추천

출처www.cnblogs.com/ocac/p/11131671.html