puzzle练习

package collection.list;

import java.util.LinkedList;

/**  
* 描述:初始正方形中的带圆圈的数字是可以移动到沿着行的其他正方形的标记。
*  在拼图的每个步骤,可以移动标记的正方形中由当前占据的整数指示的方格数。
*  标记可以沿着该行向左或向右移动,但可以不移动经过任一端。
*  例如,唯一合法的第一步是将标记向右移动三个方格,因为没有空间向左移动三个空格。
*  拼图的目标是将标记移动到行的远端的0。 要求:用递归或栈或者队列实现编程。   
*  如果圆圈能够移动到最后0的位置,返回true,否则返回false。    
*  程序要适应任何大小的方格数,并且方格里的数字是随机的,范围是[1,9]。  
*  如何检测不能解决的结构,是否存在可以改善执行时间的方法。   
*  程序运行,需要输入随机的方格数,然后打印出方格,再打印详细的移动路径。
*  
* @author ASUS  
* @date 2018年6月14日
*/

public class HomeWork {

	public static<T> boolean isfind(LinkedList<Integer>  list) {
	
		if(list.isEmpty()||( list.indexOf( list.get(0))+ list.get(0)>=list.size())||0-list.get(0)<0) {
			 return false ;
		 }
		 Integer tmp = list.get(0);
		 while(tmp != list.getLast()) {
			 
			 while(list.indexOf(tmp)+tmp<=list.size()) {
			 tmp = list.get(list.indexOf(tmp)+tmp);
			 }
			 if(list.indexOf(tmp)+tmp>list.size()&& list.indexOf(tmp)-tmp>=0){
				 tmp = list.get(list.indexOf(tmp)-tmp);	 
			 }
			 return false;
		 }		
		    return true;
	     
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 LinkedList<Integer> list = new LinkedList<Integer>();
		
		 list.add(4);
		 list.add(8);
		 list.add(5);
		 list.add(2);
		 list.add(3);
		 list.add(5);
		 list.add(1);
		 list.add(6);
		 list.add(4);
		 list.add(0);
	 
		System.out.println( isfind(list)); 
		 
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41974391/article/details/80742218
今日推荐