pullze

初始正方形中的带圆圈的数字是可以移动到沿着行的其他正方形的标记。 在拼图的每个步骤,可以移动标记的正方形中由当前占据的整数指示的方格数。 标记可以沿着该行向左或向右移动,但可以不移动经过任一端。 例如,唯一合法的第一步是将标记向右移动三个方格,因为没有空间向左移动三个空格。

拼图的目标是将标记移动到行的远端的0。

要求: 用递归 或 栈或者队列实现编程。
如果圆圈能够移动到最后0的位置,返回true,否则返回false。
程序要适应任何大小的方格数,并且方格里的数字是随机的,范围是[1,9]。

import java.util.ArrayList;
import java.util.Random;

public class HomeWork {  
/**
 * 进行数组第一次的移动
 * 
 * @param a  ArrayList类型的数组
 * @param  tmp  开始位置的下标
 * @return
 * */     
    public static int move(ArrayList<Integer> a,int tmp) { 

      if((tmp+a.get(tmp))<=a.size()-1){
         tmp=tmp+a.get(tmp);  

      }
      else{
          if(tmp-a.get(tmp)>=0){
              tmp=tmp-a.get(tmp);
          }
      }
      return tmp;
    } 


/**
* 通过调用move函数让数组进行移动
* 
* @param a  ArrayList类型的数组
* @param  tmp   开始位置的下标
* @return
* 
* */
  public static boolean puzzle(ArrayList<Integer> a,int tmp){

      while(tmp!=a.size()-1){
        if(a.get(tmp)+tmp>a.size()-1&&tmp-a.get(tmp)<0){

                break;
                }

            tmp=move(a, tmp);
        }       
        if(tmp==a.size()-1){
            return true;
        }
        else{
        return false;
        }

    }

/**
 * 创建一个随机数组
 * 
 * @return
 * */ 
  public static ArrayList<Integer> random(){
      ArrayList<Integer> a=new ArrayList<Integer> ();
      Random b=new  Random();
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      a.add(b.nextInt(10));
      return a;

  }


    public static void main(String[] args) {  
        ArrayList<Integer> a=random();      
        System.out.println(puzzle(a, 0));

    }  
} 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值