求一个用matlab编写的汉诺塔问题的程序

求一个用matlab编写的汉诺塔问题的程序,第1张

function hanoi(n)

%a上原有盘数为n的汉诺段亮塔。

han(n,'a','握早宽b','c')

function han(n,a,b,c)

if n==1

ex(a,c)

else

han(n-1,a,c,b)

ex(a,c)

han(n-1,b,a,c)

end

function ex(a,b)

disp ([a '-->' b])

用的时候,输入hanoi(4)它就会把a上原有四个盘子的解法显示睁神出来

你的问题描述可能不准确,如果只是橡散要把矩阵第知如数一列换到第三列,那非常简单(设矩阵为M):

M = M(:, [3 2 1])

但从图看,似乎并不是这个意思(文字不知道是哪种语言,看不懂),看起来像是一个汉诺塔问题(也称河内搭首塔,Tower of Hanoi)。

汉诺塔的求解一般都是用递归算法,有很多人编写了程序,思路大同小异,下面给一个例子:

function hannuota(n,ta1,ta2,ta3)

%汉诺塔

if n==1

    fprintf('%c --> %c\n',ta1,ta3)

else

    hannuota(n-1,ta1,ta3,ta2)

    fprintf('%c --> %c\n',ta1,ta3)

    hannuota(n-1,ta2,ta1,ta3)

end

保存成 hannuota.m 文件,然后在命令窗口调用(第一个参数是圆盘的数量,后三个参数依次是三个柱子的名称,开始时圆盘都位于第一个柱子,最终移到第三个柱子,第二个柱子作为中转):

>> hannuota(3,'A','B','C')

A --> C

A --> B

C --> B

A --> C

B --> A

B --> C

A --> C

还有人做了相关的动画,例如附件就是一个效果不错的动画。但那个动画演示的是5个圆盘的情况,而移动过程是写死在程序里的,改起来比较麻烦,仅供参考。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12509545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存