首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

下楼梯(深搜+回溯)JAVA解答

2012-12-27 
上楼梯(深搜+回溯)JAVA解答N阶楼梯上楼问题:一次可以走两阶或一阶,请把所有行走方式打印出来。 import java

上楼梯(深搜+回溯)JAVA解答
N阶楼梯上楼问题:一次可以走两阶或一阶,请把所有行走方式打印出来。

import java.util.Scanner; public class Main{   private int n;   private int[] answer;//存入上楼梯的方法   private int ways;//上楼梯方法总数     public Main(int n){      this.n=n;      answer=new int[n+1];   }   public int getWays(){     return ways;   }   //第level步上到了第step阶   public void  GoUp(int level,int step){    if(step>n) return;    if(step == n)//已经走到尽头       {          ways++;          for(int i=0; i<level; i++)          System.out.printf("%d\t",answer[i]);          System.out.println();          return;      }      for(int i=1; i<=2; i++)//2种分枝       {              answer[level] = i;//记录解向量        //继续递归走下一步,注意递归自动隐含level和step的回溯过程!!        GoUp(level+1,step+i);       //answer[level]=0;//恢复现场,          }       }    public static void main(String[] args){      Scanner in=new Scanner(System.in);    System.out.println("请输入楼梯的阶数");    int n =in.nextInt();      Main ma=new Main(n);    ma.GoUp(0,0);      System.out.printf("Totally %d ways .\n",ma.getWays());    }}  

程序运行:
C:\test>java Main
请输入楼梯的阶数
5
1       1       1       1       1
1       1       1       2
1       1       2       1
1       2       1       1
1       2       2
2       1       1       1
2       1       2
2       2       1
Totally 8 ways .

C:\test>java Main
请输入楼梯的阶数
6
1       1       1       1       1       1
1       1       1       1       2
1       1       1       2       1
1       1       2       1       1
1       1       2       2
1       2       1       1       1
1       2       1       2
1       2       2       1
2       1       1       1       1
2       1       1       2
2       1       2       1
2       2       1       1
2       2       2
Totally 13 ways .

C:\test>

热点排行