69,382
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <assert.h>
#define MAXN 256
#define move( from , to ) printf("%c-->%c\n" , from , to)
#define SWAP( a , b ) do { a^=b; b^=a; a^=b; } while(0)
void hanio( int n , int from , int temp , int to )
{
int skp = 0;
int sk_n[ MAXN ] , sk_from [ MAXN ] , sk_temp [ MAXN ] , sk_to [ MAXN ];
assert(n < MAXN);
while( 1 )
{
if( n == 1 )
{
move( from , to );
}
else
{
sk_n [ skp ] = -- n ;
sk_from[ skp ] = temp ;
sk_temp[ skp ] = from ;
sk_to [ skp ] = to ;
++ skp ;
SWAP( to , temp );
continue;
}
if( skp-- )
{
n = sk_n [ skp ] ;
temp = sk_temp [ skp ] ;
from = sk_from [ skp ] ;
to = sk_to [ skp ] ;
move( temp , to );
continue;
}
else
break;
}
}
int main()
{
hanio(5, 'A', 'B', 'C');
return 0;
}