论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

HANOI塔问题的递归解

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:45:36

    HANOI塔问题是《数据结构》中用来介绍递归算法的最典型的例题。

    本程序可同时将HANOI塔问题的解题步骤的中间结果显示在屏幕上和保存在文本文件中。(后一点对于显示结果很多无法在一屏中显示时,非凡有用)

    程序思路很简单,看注释就明白了。
 

/*
  Name:     hanoi2.c     
  Author:       zhuqing
  Des cription:      HANOI塔问题的递归解  
  Date: 06-08-03 11:44
  Copyright:
*/
#include <stdio.h>
#define N 5
/* 原柱,中间柱,目标柱初值数组 */
char a[]={'1','2','3','4','5'};
char b[]={'0','0','0','0','0'};
char c[]={'0','0','0','0','0'};
int step=0;
main()
{
FILE *fp;
int i;
if((fp=fopen("c:\\hanoi2.txt","w"))==NULL){
 printf("\nCannot open the file!\n");
 getch();
 exit(0);
}
printf("\n============ HANOI TOWER ============\n");
print(N);
fprint(N,fp);
move(N,a,b,c,fp);
fclose(fp);
getch();
}
/* 递归函数 */
void move(int n,char a[],char b[],char c[],FILE* fp)
{
    if(n>0){
        move(n-1,a,c,b,fp);

        c[n-1]=a[n-1];
        a[n-1]='0';
        print(N);
        fprint(N,fp);

        move(n-1,b,a,c,fp);
    }   
}
/*  打印输出结果到屏幕的函数    */
void print(n)
int n;
{
int i;
printf("\nSTEP%d",step++);
printf("\na:");
for(i=0;i<n;i++)
    printf("%3c",a[i]);
printf("\nb:");
for(i=0;i<n;i++)
    printf("%3c",b[i]);
printf("\nc:");
for(i=0;i<n;i++)
    printf("%3c",c[i]);
printf("\n-------------------------------------\n");
}
/*  打印输出结果到文本文件的函数    */
void fprint(n,fp)
int n;
FILE *fp;
{
int i;
fputs("\na:",fp);
for(i=0;i<n;i++)
    fputc(a[i],fp);
fputs("\nb:",fp);
for(i=0;i<n;i++)
    fputc(b[i],fp);
fputs("\nc:",fp);
for(i=0;i<n;i++)
    fputc(c[i],fp);
fputs("\n-------------------------------------\n",fp);
}
           

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058