| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2313 人关注过本帖
标题:请问一下汉诺塔的C程序制作方法
只看楼主 加入收藏
windowsmac
该用户已被删除
收藏
 问题点数:0 回复次数:11 
请问一下汉诺塔的C程序制作方法
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: 汉诺塔 制作 C语言 原理 
2008-07-03 08:09
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
原理是一个递推或者一个递归算法
f(n)=2*f(n-1)+1
f(1)=1

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-07-03 08:18
cmgycmgy22
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2008-6-25
收藏
得分:0 
看似简单,却很深奥

08年6月30日开始自学C
2008-07-03 09:12
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
[bo][un]cmgycmgy22[/un] 在 2008-7-3 09:12 的发言:[/bo]

看似简单,却很深奥

你说的夸张了
解法的优劣不同  反正不用递归也能解



爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-07-03 09:20
yt414204458
Rank: 2
等 级:论坛游民
帖 子:260
专家分:55
注 册:2008-3-1
收藏
得分:0 
是递归的经典例子,去看看书吧,书上应该有的

一切从爱C开始
2008-07-04 19:18
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
:: 批处理版的。


@echo off
color fc
title hannoi
Call :main
pause
exit /b 0

:main
    call :about
    echo === 此程序显示汉诺塔的解法。 ===
    echo.
    :input
    set /p n="请输入汉诺塔的层数n, (n正整数): "
    set /a n+=0
    if %n% lss 1 (
        echo 您的输入有错误! & goto input
    )
    echo.
    echo %n% 层汉诺塔最快解如下
    call :hannoi %n% a b c
    echo 至少需要移动 %errorlevel%次, (即2^^n - 1)
    echo.
    exit /b %n%

:more
    echo  %1  %2-^>%3
    goto :EOF

:hannoi
    set /a i=%1-1
    if %1 lss 1 (goto :EOF) else (
        call :hannoi %i% %2 %4 %3
        :: echo %2-^>%4
        call :more %1 %2 %4
        set /a errorlevel+=1
        call :hannoi %i% %3 %2 %4
    )
    goto :EOF

:about
    echo ┏ About  ━━━━━━━━━━━┓
    echo ┃ 文件: Hannoi.bat            
    echo ┃ 名称: 汉诺塔(Hannoi)        
    echo ┃ 作者: cosdos               
    echo ┃ 时间: 2008-6-23 19:11      
    echo ┗━━━━━━━━━━━━━━━┛
    echo.
    goto :EOF


[[it] 本帖最后由 cosdos 于 2008-7-4 19:34 编辑 [/it]]

—>〉Sun〈<—
2008-07-04 19:21
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 


/* c */

#include <stdio.h>
#define MAX 7

void move(int n, char a, char b)
{
    printf("%4d: %c -> %c    ", n, a, b);
}

unsigned int Hannoi(int n, char a, char b, char c)
{
    unsigned int count = 0;
    if(n > 0)
    {
        count += Hannoi(n - 1, a, c, b);
        
        move(n, a, c);
        ++count;
        
        count += Hannoi(n - 1 , b, a, c);
    }
    return count;
}

int main(void)
{
    int n;  // 记录移动次数
     
    printf("%d 层汉诺塔的解法:\n", MAX);

    n = Hannoi(MAX, 'a', 'b', 'c');

    printf("\n共移动了 %d 次\n", n);
   
    getchar();
    return 0;
}

—>〉Sun〈<—
2008-07-04 19:30
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
a柱上N-1个盘到b柱
a柱上一个盘到c柱
b上N-1个移到c柱

—>〉Sun〈<—
2008-07-04 19:38
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
我来好好水水
非递归解法
一 盘子的移动方式只有两种
A->B B->C C->A
A->C C->B B->A
char Move[2][3][5]={"A->B","B->C","C->A
","A->C","C->B","B->A"};

二 和最底层盘子同奇同偶  肯定是A->B B->C C->A 反之A->C C->B B->A

用[Total Level%2!=Level%2]选组

三 Level[64]用Level[]++%3选方向

四 下层盘每移动一次  上层盘肯定得移动两次
    TotalLevel=2^n-1
没了哦  代码就10行左右


我也是学别人的方法  惭愧  
直接无视就可以了

[[it] 本帖最后由 liyanhong 于 2008-7-12 10:46 编辑 [/it]]

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-07-12 10:39
blackfail
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-12
收藏
得分:0 
汉诺塔C递归算法详解
程序:
void move(char x,char y){
printf("%c-->%c\n",x,y);
}

void hanoi(int n,char one,char two,char three){
/*将n个盘从one座借助two座,移到three座*/
if(n==1) move(one,three);
else{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}

main(){
int n;
printf("input the number of diskes:");
scanf("%d",&n);
printf("The step to moving %3d diskes:\n",n);
hanoi(n,'A','B','C');
}
2008-07-12 10:48
快速回复:请问一下汉诺塔的C程序制作方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022648 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved