查看: 132|回复: 2|关注: 0

[未答复] 四柱汉诺塔问题

[复制链接]

新手

5 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
发表于 2019-11-3 21:11:59 | 显示全部楼层 |阅读模式
就是不能出结果而且新手不知道代码逻辑正确与否
代码如下:
n=3;
function hanoi__four(n)
    m=zero(MAX+1); %创建一个空数组
    for i=1:Max
        m(i)=INT_MAX;
        for k=1:i
            temp=2*m(i-k)+pow(2,k)-1;
            if temp<m(i)
                m(i)=temp;
                K(i)=k;
            end
        end
    end
        if n == 1
            fprintf('将 1 号盘子从%s ---> %s\n',a,d);
        else
            kn = K(i);
            hanoi__four(n-kn,a,c,d,b);
            hanoi__three(kn,a,c,d);
            hanoi__four(n-kn,b,a,c,d);
        end
end
function hanoi__three(n)
move1(n,'A','B','C');
    % 将n个盘子从a经过b移动到c
    function move1(n,a,b,c)
        % 如果是一个盘子,直接从a移动到c
        if n == 1
            fprintf('将 1 号盘子从%s ---> %s\n',a,c);
        else
            % 否则,先将n-1个盘子从A经过C移动到B
            move1(n-1,a,c,b);
            % 将第n个盘子从A移动到C
            fprintf('将 %d 号盘子从%s ---> %s\n',n,a,c);
            % 将n-1个盘子从B经过A移动到C
            move1(n-1,b,a,c);
        end
    end
end


新手

5 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
 楼主| 发表于 2019-11-4 11:12:30 | 显示全部楼层
为啥我不能输出结果???
求解
n=4;
function hanoi__four(n)
move(n,'A','B','C','D');
    function move(n,a,b,c,d)
        if n == 1
            fprintf('将 1 号盘子从%s ---> %s\n',a,d);
        elseif n==2
            fprintf('将 1 号盘子从%s ---> %s\n',a,c);
            fprintf('将 2 号盘子从%s ---> %s\n',a,d);
            fprintf('将 1 号盘子从%s ---> %s\n',c,d);
        else
            hanoi__four(n-2,a,c,d,b);
            hanoi__three(2,a,c,d);
            hanoi__four(n-2,b,a,c,d);
        end
    end
function hanoi__three(r)
move1(r,'A','B','C');
    % 将n个盘子从a经过b移动到c
    function move1(r,a,b,c)
        % 如果是一个盘子,直接从a移动到c
        if r == 1
            fprintf('将 1 号盘子从%s ---> %s\n',a,c);
        else
            % 否则,先将n-1个盘子从A经过C移动到B
            move1(r-1,a,c,b);
            % 将第n个盘子从A移动到C
            fprintf('将 %d 号盘子从%s ---> %s\n',r,a,c);
            % 将n-1个盘子从B经过A移动到C
            move1(r-1,b,a,c);
        end
    end
end
end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表