IDA*() {
/* Compute lower bound */
lb = ComputeLowerBound();
if( cutoff ) return( no );
/* Generate moves */
movelist = GenerateMoves();
for( each move ) {
done = IDA*();
if( done == yes ) return( yes );
}
return( no );
}
|
|
IDA*() {
/* Compute the best possible lower bound */
lb = ComputeLowerBound();
lb += UsePatterns();
lb += UseDeadlockTable();
lb += UseOverestimate( CntrlOverestimate() );
lb += ReadTransTable();
if( cutoff ) return( no );
/* Preprocess */
PatternSearch( CntrlPatternSearch() );
lb += UsePatterns();
if( cutoff ) return( no );
/* Generate searchable moves */
movelist = GenerateMoves();
RemoveDeadMoves( movelist );
IdentifyMacros( movelist );
OrderMoves( movelist );
for( each move ) {
if( Irrelevant( move, CntrlIrrelevant() )) next;
done = IDA*();
if( done == yes ) return( yes );
if( GoalCut() ) break;
UpdateLowerBound();
if( cutoff ) return( no );
}
SaveTransTable( CntrlTransTable() );
return( no );
}
|