#include"Hanoi.h"voidShow(unsignedchar** PP_Array,unsignedchar Height){if(NULL!= PP_Array &&NULL!=*PP_Array){printf("%5c%5c%5c\n--------------------\n",'A','B','C');for(unsignedchar i =0; i < Height; i++){for(unsignedchar j =0; j <3; j++){printf("%5d", PP_Array[i][j]);}puts("");}puts("");}}voidMove(unsignedchar** PP_Array,unsignedchar Height,char X,char Y){unsignedchar m = X -65;unsignedchar n = Y -65;//保存第一个不为 0 的数据unsignedchar Xmove =0;for(unsignedchar i =0; i < Height; i++){if(0!= PP_Array[i][m]){
Xmove = i;break;}}//找到第一个为 0 的数据unsignedchar Ymove =0;if(0== PP_Array[Height -1][n]){
Ymove = Height -1;}else{for(unsignedchar i =0; i < Height; i++){if(0!=PP_Array[i][n]){
Ymove = i;break;}}
Ymove -=1;}//交换unsignedchar Temp = PP_Array[Xmove][m];
PP_Array[Xmove][m]= PP_Array[Ymove][n];
PP_Array[Ymove][n]= Temp;}voidHanoi(unsignedchar** PP_Array,unsignedchar Height,unsignedchar Count,char A,char B,char C){if(1> Count){return;}elseif(1== Count){printf("%c--->%c\n", A, C);Move(PP_Array, Height, A, C);Show(PP_Array, Height);}else{Hanoi(PP_Array, Height, Count -1, A, C, B);printf("%c--->%c\n", A, C);Move(PP_Array, Height, A, C);Show(PP_Array, Height);Hanoi(PP_Array, Height ,Count -1, B, A, C);}}unsignedchar**CreateHanoi(unsignedchar Height,unsignedchar Count){if(Height >1&&Height>= Count){unsignedchar** PP_Array =(unsignedchar**)malloc(sizeof(unsignedchar*)*Height);memset(PP_Array,0,sizeof(unsignedchar*)*Height);for(unsignedchar i =0; i < Height; i++){
PP_Array[i]=(unsignedchar*)malloc(sizeof(unsignedchar)*3);memset(PP_Array[i],0,sizeof(unsignedchar)*3);}for(unsignedchar i =0; i < Count; i++){
PP_Array[Height -1- i][0]= i +1;}return PP_Array;}returnNULL;}
View
A--->C
A B C
--------------------000400300200105
A--->B
A B C
--------------------000000300200145
C--->B
A B C
--------------------000000300250140
A--->C
A B C
--------------------000000000250143
B--->A
A B C
--------------------000000500200143
B--->C
A B C
--------------------000000500204103
A--->C
A B C
--------------------000000005204103
A--->B
A B C
--------------------000000005004123
C--->B
A B C
--------------------000000000054123
C--->A
A B C
--------------------000000000450123
B--->A
A B C
--------------------000000500400123
C--->B
A B C
--------------------000000500430120
A--->C
A B C
--------------------000000000430125
A--->B
A B C
--------------------000000040030125
C--->B
A B C
--------------------000050040030120
A--->C
A B C
--------------------000050040030021
B--->A
A B C
--------------------000000040030521
B--->C
A B C
--------------------000000000034521
A--->C
A B C
--------------------000000005034021
B--->A
A B C
--------------------000000005004321
C--->B
A B C
--------------------000000000054321
C--->A
A B C
--------------------000000000450321
B--->A
A B C
--------------------000000500400321
B--->C
A B C
--------------------000000500402301
A--->C
A B C
--------------------000000005402301
A--->B
A B C
--------------------000000005002341
C--->B
A B C
--------------------000000000052341
A--->C
A B C
--------------------000000003052041
B--->A
A B C
--------------------000000003002541
B--->C
A B C
--------------------000004003002501
A--->C
A B C
--------------------005004003002001