経典問題のハノタ

4090 ワード

ハノータ問題
ハノタは実は深く考えていると複雑になり、簡単に考えていると、不可能だと思いますか?
これがアルゴリズムの楽しみです
ハノータの再帰思想解法は簡単で、大きい問題は小さい問題に分解して解く.
1.皿が1つしかない場合は、AからC皿に直接移動すればよい.2つの皿がある場合、Bを借りて、A->B、A->C、B->C 3の手順に従います.3つ以上の皿があれば再帰思想を運用することができ、皿がどんなに多くても、規則的で、上下が小さい.皿を動かすと簡単です.
最後の皿を除く全ての皿を補助柱(A->B)に移動する、最後の皿を目標柱(A->C)に移動し、最後に補助柱上の皿をAを借りてC上(B->C)に移動する、これはまた再帰的な過程である.
 
コードは次のとおりです.
 

  
    
#include < stdio.h >

void hanoi( int n, char A, char B, char C) {
if (n == 1 ) {
printf(
" Move sheet from %c to %c
" , A, C);
}
else {
hanoi(n
- 1 , A, C, B);
hanoi(
1 , A, B, C)
hanoi(n
- 1 , B, A, C);
}
}

int main() {
int n;
printf(
" " );
scanf(
" %d " , & n);
hanoi(n,
' A ' , ' B ' , ' C ' );
return 0 ;
}