|
|
|
|
|
by pieguy
4185 days ago
|
|
Here's an iterative solution which is shorter and 3 times as fast: void iterative(int n)
{
int from[2][3] = {{0,1,2},{0,2,1}};
int to[2][3] = {{1,2,0},{2,1,0}};
for(int i=1; i<1<<n; i++)
{
int disk = __builtin_ctz(i);
int count = (i>>(1+disk))%3;
int parity = (disk^n)&1;
move(from[parity][count], to[parity][count]);
}
}
|
|