v.2.0.0 NDameBacktracker implementation
This commit is contained in:
55
libs/backtracking-lib/src/abstract-backtracker.ts
Normal file
55
libs/backtracking-lib/src/abstract-backtracker.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { Logger } from '@nestjs/common';
|
||||
import { IBacktrackingModel } from './backtracking-model.interface';
|
||||
|
||||
export abstract class ABacktracker {
|
||||
protected readonly logger = new Logger(this.constructor.name);
|
||||
|
||||
abstract doBacktrack: () => boolean[][];
|
||||
|
||||
protected findSolution = (dataModel: IBacktrackingModel): boolean => {
|
||||
if (dataModel.solved()) return true;
|
||||
|
||||
// nächstes freie Position suchen
|
||||
// const nxtPossPos = dataModel.nextPossiblePosition();
|
||||
|
||||
while (dataModel.nextPossiblePosition()) {
|
||||
dataModel.applyPosition();
|
||||
|
||||
// Lösung mit dem neu konfigurierten dataObject finden
|
||||
const solved: boolean = this.findSolution(dataModel);
|
||||
|
||||
if (solved) return true;
|
||||
|
||||
const afterDiscardedPos = dataModel.discardPosition();
|
||||
this.logger.debug(`afterDiscardedPos: ${afterDiscardedPos}`);
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
protected ___findSolution___ = (dataModel: IBacktrackingModel): boolean => {
|
||||
if (dataModel.solved()) return true;
|
||||
|
||||
// dataModel.options.forEach((option) => {
|
||||
while (dataModel.hasNext()) {
|
||||
// nächstes freie Position suchen
|
||||
const nxtPos = dataModel.nextPosition();
|
||||
this.logger.debug(`nxtPos: ${nxtPos}`);
|
||||
|
||||
// darf die Option hier eingestellt werden ?
|
||||
if (dataModel.positionPossible()) {
|
||||
dataModel.applyPosition();
|
||||
|
||||
// Lösung mit dem neu konfigurierten dataObject finden
|
||||
const solved: boolean = this.findSolution(dataModel);
|
||||
|
||||
if (solved) return true;
|
||||
|
||||
const afterDiscardedPos = dataModel.discardPosition();
|
||||
this.logger.debug(`afterDiscardedPos: ${afterDiscardedPos}`);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user