汉诺塔问题
来源:互联网 发布:尤克里里在线调音软件 编辑:程序博客网 时间:2024/06/08 13:19
//汉诺塔问题public class HanoiProblem{//递归方法解决hanoi问题public static void Hanoi(int n){if(n>0){ fun(n,"left","mid","right");}}public static void fun(int n,String from,String mid ,String to){if(n==1){ System.out.println("Move form "+from+" to "+to);}else{fun(n-1,from,to,mid);fun(1,from,mid,to);fun(n-1,mid,from,to);}}//进阶问题(递归解法)public static int step1(int[]arr){ if(arr==null||arr.length==0) { return -1; } return process(arr,arr.length-1,1,2,3);}public static int process(int[]arr,int i,int from ,int mid,int to){ if(i==-1){return 0;}if(arr[i]!=from&&arr[i]!=to){return -1; //中间位置不可能存在}if(arr[i]==from){return process(arr,i-1,from,to,mid);}else{int rest=process(arr,i-1,mid,from,to);if(rest==-1){return -1;}return (1<<i)+rest;}}//进阶问题(非递归解法)public static int step2(int []arr){if(arr==null||arr.length==0){return -1;}int from=1;int mid=2;int to=3;int i=arr.length-1;int res=0;int temp=0;while(i>=0){if(arr[i]!=from&&arr[i]!=to){return -1;}if(arr[i]==to){res+=1<<i;temp=from;from=mid;}else{temp=to;to=mid;}mid=temp; i--;}return res;} public static void main(String[]args) { int n=3; Hanoi(n); //汉诺塔问题总共的移动次数2^n-1 int[]arr={3,3,2,1}; System.out.println(step1(arr)); System.out.println(step2(arr)); }}
阅读全文
0 0
- 汉诺塔问题 背包问题
- 递归问题,汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题.
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- UVA10870(Recurrents)
- A. Scarborough Fair
- 普及练习场 简单的模拟 多项式输出
- 链表课后练习题(基础)
- Python的发展史
- 汉诺塔问题
- url编码与解码
- Linux下将动态库的调试信息分离
- 从零开始实现遗传算法(用遗传算法求解TSP)
- 实时显示状态
- 11月28号
- NFS
- HDU 2059 龟兔赛跑 (区间dp)
- 验证邮箱