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