hdu 2184 汉诺塔m步后的状态
来源:互联网 发布:ubuntu 16.04 selinux 编辑:程序博客网 时间:2024/06/05 08:43
汉诺塔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); a[0] = b[0] = c[0] = 0; dfs(a,b,c,n,m); printf("%d",a[0]); for(i = 1; i <= a[0]; ++i) printf(" %d",a[i]); printf("\n"); printf("%d",b[0]); for(i = 1; i <= b[0]; ++i) printf(" %d",b[i]); printf("\n"); printf("%d",c[0]); for(i = 1; i <= c[0]; ++i) printf(" %d",c[i]); printf("\n"); } return 0;}
- hdu 2184 汉诺塔m步后的状态
- 汉诺塔 从任意状态移动M步后的状态
- hdu 2117(小数点后m位)
- 26步解开任意状态的魔方
- HDU-Just a Numble-1/n.后m位
- delphi7解决“多步操作产生错误,请检查每一步的状态”的办法
- "多步操作产生错误,请检查每一步的状态" 的解决方案
- hdu 5108 最小的M使N/M为素
- HDU 1280 前m大的数
- hdu 1280 前m大的数
- hdu-1280-前m大的数
- hdu 1280 前m大的数
- hdu 1280 前m大的数
- hdu 1280 前m大的数
- hdu 1280 前m大的数
- hdu前M大的数
- HDU 1280 前m大的数
- hdu------1280 前m大的数
- 明显是数据库的插件没有复制过去呀!(勿推荐)
- SQL Server编程系列(2):SMO常用对象的有关操作
- http://forum.csdn.net/PointForum/Forum/PointExchangeOK.aspx
- 关于中国劳工退中介费的政策规定---新美亚,sanmina,sci,中国劳工,新加坡中介,退中介费,
- 人变懒了
- hdu 2184 汉诺塔m步后的状态
- Android开发——关于Service的一些要点
- android 自定义title样式
- android界面无标题栏和全屏效果的实现方式
- Android 按钮效果的两种实现方法
- Android 中的ListView内容刷新问题
- android输入框被键盘遮挡
- android网络连接总结
- Android Nine Patch图片及按钮背景