`
128kj
  • 浏览: 583567 次
  • 来自: ...
社区版块
存档分类
最新评论

上楼梯(深搜+回溯)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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics