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("
Cannot open the file!
");
getch();
exit(0);
}
printf("
============ HANOI TOWER ============
");
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("
STEP%d",step++);
printf("
a:");
for(i=0;i printf("%3c",a[i]); printf(" b:"); for(i=0;i printf("%3c",b[i]); printf(" c:"); for(i=0;i printf("%3c",c[i]); printf(" ------------------------------------- "); } /* 打印输出结果到文本文件的函数 */ void fprint(n,fp) int n; FILE *fp; { int i; fputs(" a:",fp); for(i=0;i fputc(a[i],fp); fputs(" b:",fp); for(i=0;i fputc(b[i],fp); fputs(" c:",fp); for(i=0;i fputc(c[i],fp); fputs(" ------------------------------------- ",fp); }