Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1. std::vector<void*>* PDB_4_4_4_4(MNPuzzleState<4, 4> g, Heuristic<MNPuzzleState<4, 4>> &h)
  2. {
  3.   bool to_load = true;
  4.   bool to_save = true;
  5.   const char *hprefix = "./PDB/";
  6.   std::cout <<"starting PDB_4_4_4_4" << std::endl;
  7.   std::vector<void*>* toClean = new std::vector<void*>();
  8.     // patterns
  9.     std::vector<int> p1 = {0,1,4,5};
  10.     std::vector<int> p2 = {0,2,3,6,7};
  11.     std::vector<int> p3 = {0,8,9,12,13};
  12.   std::vector<int> p4 = {0,10,11,14,15};
  13.  
  14.   // PDB1
  15.   MNPuzzle<4,4>* mnp1 = new MNPuzzle<4,4>();
  16.   toClean->push_back(mnp1);
  17.   mnp1->SetPattern(p1);
  18.   mnp1->StoreGoal(g);
  19.   LexPermutationPDB<MNPuzzleState<4, 4>, slideDir, MNPuzzle<4, 4>>* pdb1 = new LexPermutationPDB<MNPuzzleState<4, 4>, slideDir, MNPuzzle<4, 4>>(mnp1, g, p1) ;
  20.   toClean->push_back(pdb1);
  21.   if (!to_load || !pdb1->Load(hprefix))
  22.   {
  23.     pdb1->BuildAdditivePDB(g, 1);
  24.     if (to_save){
  25.       pdb1->Save(hprefix);
  26.     }
  27.   }
  28.    
  29.   // PDB2
  30.   MNPuzzle<4, 4>* mnp2 = new MNPuzzle<4, 4>();
  31.   toClean->push_back(mnp2);  
  32.   mnp2->SetPattern(p2);
  33.   mnp2->StoreGoal(g);
  34.   LexPermutationPDB<MNPuzzleState<4, 4>, slideDir, MNPuzzle<4, 4>>* pdb2 = new LexPermutationPDB<MNPuzzleState<4, 4>, slideDir, MNPuzzle<4, 4>>(mnp2, g, p2);
  35.   toClean->push_back(pdb2);
  36.   if (!to_load || !pdb2->Load(hprefix))
  37.   {
  38.     pdb2->BuildAdditivePDB(g, 1);
  39.     if (to_save){
  40.       pdb2->Save(hprefix);
  41.     }
  42.   }
  43.  
  44.   // PDB3
  45.   MNPuzzle<4, 4>* mnp3 = new MNPuzzle<4, 4>();
  46.   toClean->push_back(mnp3);
  47.   mnp3->SetPattern(p3);
  48.   mnp3->StoreGoal(g);
  49.   LexPermutationPDB<MNPuzzleState<4, 4>, slideDir, MNPuzzle<4, 4>>* pdb3 = new LexPermutationPDB<MNPuzzleState<4, 4>, slideDir, MNPuzzle<4, 4>>(mnp3, g, p3);
  50.   toClean->push_back(pdb3);
  51.   if (!to_load || !pdb3->Load(hprefix))
  52.   {
  53.     pdb3->BuildAdditivePDB(g, 1);
  54.     if (to_save){
  55.       pdb3->Save(hprefix);
  56.     }
  57.   }
  58.  
  59.   // PDB4
  60.   MNPuzzle<4, 4>* mnp4 = new MNPuzzle<4, 4>();
  61.   toClean->push_back(mnp4);
  62.   mnp4->SetPattern(p4);
  63.   mnp4->StoreGoal(g);
  64.   LexPermutationPDB<MNPuzzleState<4, 4>, slideDir, MNPuzzle<4, 4>>* pdb4 = new LexPermutationPDB<MNPuzzleState<4, 4>, slideDir, MNPuzzle<4, 4>>(mnp4, g, p4);
  65.   toClean->push_back(pdb4);
  66.   if (!to_load || !pdb4->Load(hprefix))
  67.   {
  68.     pdb4->BuildAdditivePDB(g, 1);
  69.     if (to_save){
  70.       pdb4->Save(hprefix);
  71.     }
  72.   }  
  73.  
  74.   h.lookups.resize(0);
  75.   h.heuristics.resize(0);
  76.  
  77.   h.lookups.push_back({kAddNode, 1, 4});
  78.   h.lookups.push_back({kLeafNode, 0, 0});
  79.   h.lookups.push_back({kLeafNode, 1, 1});
  80.   h.lookups.push_back({kLeafNode, 2, 2});
  81.   h.lookups.push_back({kLeafNode, 3, 3});
  82.  
  83.   h.heuristics.push_back(pdb1);
  84.   h.heuristics.push_back(pdb2);
  85.   h.heuristics.push_back(pdb3);
  86.   h.heuristics.push_back(pdb4);
  87.   return toClean;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement