汉诺塔的简单介绍
这里以三阶的为基本规则介绍,把全部环从A(起始柱)移动到C(目标柱),且大的环始终要在小的环之下。用c语言体现解汉诺塔过程。
汉诺塔的思路体现
有关递归的思想
一个n阶的汉诺塔可以化为n-1阶,n-2 ..... 1阶来解开 。比如说3阶的就可以化成2个2阶的,2个2阶的又可以化成4个1阶的来解。 比如说解开一个2阶的汉诺塔其实就是解开2个1阶的汉诺塔。都是从最低层开始拿。
基本解法步骤
1.把(n-1)个从起始柱拿开 通过目标柱 移动到中转柱上。
2.把第n个从起始柱移动到目标柱上。
3.把n-1个移动到目标柱子上。
在这几步期间 起始柱 ,中转柱 ,目标柱 其实都是相对的,可以互相转换的。都是相对的。
3阶汉诺塔解法的代码体现
void move(int n, char A, char B, char C)
///A为起始柱 B为中转柱 C为目标柱
{
if (n == 1)
{
printf("%c->%c\n", A, C);
}
if (n >= 2)
{
move(n - 1, A, C, B);
printf("%c->%c\n", A, C);
move(n - 1, B, A, C);
}
}
int main()
{
int n;
scanf("%d", &n);
move(n, 'A', 'B', 'C');
return 0;
}
这里把形式参数和实际参数设置为了同名好辨认。
传入参数 阶数 三根柱子。以体现解法。
部分代码解析
printf("%c->%c\n", A, C);其意思是打印A->C 意是从A移动到C上,故之后的移动都得用char A ,char C来移动 。像下一次调用move(n - 1, A, C, B); 就得让B当为目标柱来传传到char C中,因为最终n-1个是要到B柱子上的。
move(n - 1, A, C, B); 其意思是把n-1个环 从A通过C移动到B上。为把(n-1)个从起始柱拿开 通过目标柱 移动到中转柱上的体现。
printf("%c->%c\n", A, C);把第n个从起始柱移动到目标柱上。
move(n - 1, B, A, C);把n-1个移动到目标柱子上。
总结
以上就是汉诺塔的基本思路 ,如果有什么错误 和 不懂的可以私信我。 本人也是初学者还望大佬们多多指教,以上也是个人的一些想法和解法思路。