汉诺塔算法分析

算法描述:         

汉诺塔主要是有三个塔座X,Y,Z,要求将三个大小不同,依小到大编号为1,2…..n的圆盘从A移动到塔座Z上,要求
(1):每次只能移动一个圆盘
(2):圆盘可以插到X,Y,Z中任一塔座上
(3):任何时候不能将一个较大的圆盘压在较小的圆盘之上

程序实现逻辑:

汉诺塔的算法就3个步骤:

【1】把a上的n-1个盘通过c移动到b。
【2】把a上的最下面的盘移到c。
【3】因为n-1个盘全在b上了,所以把b当做a重复以上步骤就好了

erlang程序实现:

%% =============================================================================
%% 参数说明:
%% N:圆盘的数目;A:起始塔标识;B:辅助塔标识;C:目的塔标识
%% =============================================================================
hanoi(N) -> move(N, a, b, c).

move(1, A, _B, C) -> io:format("Move disk 1 from ~p to ~p~n", [A, C]);
move(N, A, B, C) -> move(N - 1, A, C, B), 
		    io:format("Move disk ~p from ~p to ~p~n", [N, A, C]), 
		    move(N - 1, B, A, C).

更详细说明可以参考百度百科:
http://baike.baidu.com/view/191666.htm?fr=aladdin#5_2

    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/TinmKing034/article/details/25139551
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞