汉诺塔 - 解决思路 |
1.如果只有一个金片,则把该金片从源移动到目标棒,结束。
2.如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒
//
Tower of Hanoi 汉诺塔
#include < stdio.h>
void TOH( int n, char A, char B, char C)
{
if (n == 1 )
{
printf( " Movedisk %d from %c to %c \n " ,n,A,C);
return ;
}
TOH(n - 1 , A, C, B);
printf( " Movedisk %d from %c to %c \n " ,n,A,C);
TOH(n - 1 , B, A, C);
}
void main()
{
int m, n;
printf( " 请输入测试数据的次数 " );
scanf( " %d " , & m);
while (m != 0 )
{
printf( " 请输入数字n以解决n阶汉诺塔问题:\n " );
scanf( " %d " , & n);
TOH(n, ' A ' , ' B ' , ' C ' );
m -- ;
if (m == 0 )
{
return ;
}
}
}
#include < stdio.h>
void TOH( int n, char A, char B, char C)
{
if (n == 1 )
{
printf( " Movedisk %d from %c to %c \n " ,n,A,C);
return ;
}
TOH(n - 1 , A, C, B);
printf( " Movedisk %d from %c to %c \n " ,n,A,C);
TOH(n - 1 , B, A, C);
}
void main()
{
int m, n;
printf( " 请输入测试数据的次数 " );
scanf( " %d " , & m);
while (m != 0 )
{
printf( " 请输入数字n以解决n阶汉诺塔问题:\n " );
scanf( " %d " , & n);
TOH(n, ' A ' , ' B ' , ' C ' );
m -- ;
if (m == 0 )
{
return ;
}
}
}