⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 heuristischbyfred.java

📁 puzzle game with java.very good !
💻 JAVA
字号:
/*
 * Created on 28-okt-2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package logic;

import java.util.Iterator;
import java.util.TreeSet;
import java.util.LinkedList;

/**
 * @author gebruiker
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class HeuristischByFred extends ProbleemOplosser {
	private TreeSet open;
	private LinkedList closed = new LinkedList();
	/* gebruik manhattan-afstand, maar controleer slechts rij per rij...
	 * zo splits je het probleem op in deelproblemen.
	 * Als 1 rij gevonden is, dan verwijder je alle nodes, behalve het pad om de rij te vormen
	 * doe dit rij per rij...
	 * 
	 * (non-Javadoc)
	 * @see logic.ProbleemOplosser#getOplossing(logic.SpeelBordToestand, logic.SpeelBordToestand)
	 */
	public SpeelBordToestand getOplossing(
		SpeelBordToestand start,
		SpeelBordToestand doel) {
			int maxRowToControl = 1;
			
			ManhattanComparator comparator = new ManhattanComparator(doel);
			
			this.clearLists();
			open = new TreeSet(comparator);
			solutionFinderStarted();
		
			open.add(start.clone());
			
			while(open.size() > 0)//zolang de set knopen bevat
			{
				SpeelBordToestand teExpanderen = (SpeelBordToestand)open.first();
			
				Iterator iterator = teExpanderen.getSuccessors().iterator();
				while(iterator.hasNext())
				{
					intNumberOfNodesExpanded++;
				
					SpeelBordToestand anExpandedNode = (SpeelBordToestand)iterator.next();
					if(doel.equals(anExpandedNode))
					{
						createSolutionList(anExpandedNode);
						return getFirst();
					}
					
					if(anExpandedNode.getManhattanAfstandTot(doel, maxRowToControl) == 0)
					{		
				
								
						//hoog de rij 1 op waardoor de manhattanafstand wordt bepaald
						//clear de open en closed list.
						maxRowToControl++;
						comparator.setMaxRowToControl(maxRowToControl);
						open.clear();
						closed.clear();
						System.gc();
						open.add(anExpandedNode);//voeg deze gevonden knoop terug toe aan de open list en werk daarop verder
						open.add(anExpandedNode); //nog properder oplossen!!
					}else if(!closed.contains(anExpandedNode) && !open.contains(anExpandedNode))//als deze toestand nog niet voorkomt bij de closed of open statussen
					{
						open.add(anExpandedNode);//voeg elke successor toe aan de SET. => automatisch geordend.
					}
				}
				closed.addFirst(teExpanderen);
				open.remove(teExpanderen);

			}
			return doel;
	}
	protected void clearLists()
	{
		super.clearLists();
		if(open != null)
			open.clear();
		closed.clear();
	}	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -