%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个圆盘的情况,而移动过程是写死在程序里的,改起来比较麻烦,仅供参考。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)