汉诺塔m(64bit)步后的状态
#include <stdio.h>
#include <string.h>
#define N 65
__int64 bit[N] = {1};
void cal_bit()
{
for(int i = 1; i < 64; ++i)
bit[i] = bit[i-1] << 1;
}
void dfs(int *a,int *b,int *c,int n,__int64 m)
{
if(!n)
return;
if(m > bit[n-1])///第n块可以移到目标位置,移动剩下的n-1块
{
c[++c[0]] = n;
dfs(b,a,c,n-1,m-bit[n-1]);
}
else if(m == bit[n-1])///恰好将第n块移到目标位置
{
c[++c[0]] = n;
for(int i = 1; i < n; ++i)
b[++b[0]] = n - i;
}
else///第n块保留在原位置
{
a[++a[0]] = n;
dfs(a,c,b,n-1,m);