汉诺塔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);
}
}
int main()
{
cal_bit();
__int64 m;
int n,t,a[N],b[N],c[N];
scanf("%d",&t);
while(t--)
{
int i;
scanf("%d%I64d",&n,&m);