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