本文整理汇总了C++中Puzzle::makePreassignedCopy方法的典型用法代码示例。如果您正苦于以下问题:C++ Puzzle::makePreassignedCopy方法的具体用法?C++ Puzzle::makePreassignedCopy怎么用?C++ Puzzle::makePreassignedCopy使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Puzzle
的用法示例。
在下文中一共展示了Puzzle::makePreassignedCopy方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(int argc, char *argv[]) {
// timer
struct timeval start, end;
long mtime, seconds, useconds;
gettimeofday(&start, NULL);
time_t startTime = time(0);
if (argc != 3) {
printf("wrong number of inputs\n");
exit(1);
}
int** grid = fileTo2dArray(argv[1], atoi(argv[2]));
Puzzle* p = new Puzzle(grid, atoi(argv[2]));
p->initialize();
int dim = atoi(argv[2]);
if (dim<16) parallelStartDepth=86;
int highestVisitedPosition = 0;
int currentDepth = 0;
int numTried = 0;
std::vector<Puzzle*> toSolve;
Puzzle* solved = NULL;
while (!p->isSolved()) {
if (testLevel > 1 && highestVisitedPosition < p->positionOnVisited) {
if (testLevel > 1) printf("highestVisitedPosition is now %i\n", p->positionOnVisited);
highestVisitedPosition = p->positionOnVisited;
}
// step 1
if (currentDepth >= parallelStartDepth && checkCurrentCandidates(p)) {
Puzzle* forSolving = p->makePreassignedCopy();
if (testLevel > 1) {
printf("making copy: old candidates are\n");
p->printInitCandidates();
printf("new candidates are\n");
forSolving->printInitCandidates();
}
toSolve.push_back(forSolving);
if (testLevel > 1) printf("toSolve size: %i\n", (int)toSolve.size());
if (reverseSlot(p)) {
currentDepth--;
backtrack(p);
}
else {
break;
}
if (toSolve.size() >= vectorSizeLimit) {
if (testLevel > 1) printf("toSolve reached %i elements, attempting solve now\n", vectorSizeLimit);
solved = solveInitializedPuzzles(&toSolve, highestVisitedPosition, &numTried);
if (solved != NULL) {
break;
}
else while (toSolve.size() > 0) {
toSolve.pop_back();
}
}
}
else if (checkCurrentCandidates(p)) {
// step 3
bool succeeded = assignAndValidate(p);
if (succeeded) {
// step 5
advanceSlot(p);
currentDepth++;
}
else {
// step 4
backtrack(p);
}
}
else {
// step 2
if (reverseSlot(p)) {
currentDepth--;
// step 4
backtrack(p);
}
else {
//printf("step 2 failed\n");
break;
}
}
}
if (!p->isSolved()) {
p->deinitialize();
delete p;
if (testLevel > 1) printf("number of branches: %i\n", (int)toSolve.size());
//.........这里部分代码省略.........