📄 heuristischbyfred.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 + -