设为首页 加入收藏

TOP

HANOI塔问题的递归解
2014-11-23 21:36:46 】 浏览:392
Tags:HANOI 问题

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


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


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


  /*
  Name: hanoi2.c
  Author: zhuqing
  Description: HANOI塔问题的递归解
  Date: 06-08-03 11:44
  Copyright:
  */
  #include
  #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   printf("%3c",a[i]);
  printf("\nb:");
  for(i=0;i   printf("%3c",b[i]);
  printf("\nc:");
  for(i=0;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   fputc(a[i],fp);
  fputs("\nb:",fp);
  for(i=0;i   fputc(b[i],fp);
  fputs("\nc:",fp);
  for(i=0;i   fputc(c[i],fp);
  fputs("\n-------------------------------------\n",fp);
  }


  相关链接:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇牛顿和拉格朗日插值算法 下一篇二叉树的集合操作

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目