0001 #include "hanoi.h" 0002 0003 /****************************************************************************************** 0004 * 输出栈S在高度i的分布 0005 ******************************************************************************************/ 0006 void display ( Stack<int>& S, Rank i ) { 0007 Rank diskR = ( i < S.size() ) ? S[i] : 0; //通过Vecotr[]接口,获取高度i处盘子的半径 0008 for ( Rank j = 0; j < nDisk - diskR; j++ ) printf ( " " ); 0009 for ( Rank j = 0; j < diskR; j++ ) printf ( "=" ); 0010 printf ( "|" ); 0011 for ( Rank j = 0; j < diskR; j++ ) printf ( "=" ); 0012 for ( Rank j = 0; j < nDisk - diskR; j++ ) printf ( " " ); 0013 } 0014 0015 /****************************************************************************************** 0016 * 显示三个栈内容(使用全局变量) 0017 ******************************************************************************************/ 0018 void displayHanoi() { 0019 system ( "cls" ); printf ( "\n\n" ); 0020 for ( int i = nDisk - 1; i >= 0; i-- ) //自顶向下,在每一高度层次,输出(至多)三个盘子 0021 { display ( Sx, i ); display ( Sy, i ); display ( Sz, i ); printf ( "\n" ); } 0022 for ( int j = 0; j < 3 * ( 2 * nDisk + 1 ); j++ ) printf ( "=" ); printf ( "\n" ); //显示地面 0023 getchar(); 0024 }