• C语言:使用递归解决汉诺塔问题。


    //汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 //汉诺塔使用递归可以很轻松但有点抽象的解决。
     4 //汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
     5 void fun(int m,char A,char B,char C)//把A柱上的圆盘移动到B柱
     6 {
     7     if (m == 1) printf("第%d个圆盘从%c柱子移到%c柱子
    ", m, A, B);//如果本来只有一个圆盘的话,从A移到B,就直接移动。//注意输出字符串用%c,
     8     else//如果是两个圆盘,则先把第一个放到C柱,再把第二个放到B柱,再把第一个放到B柱。
     9     {
    10         fun(m - 1, A, C, B);//形参B的位置赋值了C,所以这句输出的是C。
    11         printf("第%d个圆盘从%c柱子移到%c柱子
    ", m, A, B);
    12         fun(m - 1, C, B, A);//输出从C移到B。
    13     }
    14 }
    15 void main()
    16 {
    17     int m;
    18     char A = 'A', B = 'B', C = 'C';
    19     printf("请输入汉诺塔的层数:");
    20     scanf("%d",&m);//注意scanf函数的格式。
    21     fun(m,A,B,C);
    22 }
  • 相关阅读:
    postgresql查询栅格数据范围(extent)
    raster导入postgres Windows命令
    Python使用XML操作mapnik,实现复杂标注(Multi line text symbolizer)
    Leaflet使用vector tiles 标注label设置
    Leaflet使用vector tiles样式设置
    Leaflet调用geoserver发布的矢量切片
    java 生成透明背景图片
    java 用RGB生成图片动态命名
    POI拆分单元格,并设置拆分后第一个cell的值为空cell的值
    洛谷 P1003 铺地毯 题解
  • 原文地址:https://www.cnblogs.com/ming-4/p/10511264.html
Copyright © 2020-2023  润新知