Ejemplo n.º 1
0
void PriorityQueue<N, Val>::insert(const N&& node, Val priority) {
  NodePriority qelement;
  qelement.node = move(node);
  qelement.priority = priority;
  nodetracker.push_back(qelement);
  std::push_heap(nodetracker.begin(), nodetracker.end(), NodeComparator());
}
Ejemplo n.º 2
0
const N PriorityQueue<N, Val>::minPrioirty() {
  //removes the top element of the queue.
  const N minnode = top();
  pop_heap(nodetracker.begin(), nodetracker.end(), NodeComparator());
  nodetracker.pop_back();
  return minnode;
}
Ejemplo n.º 3
0
void* TaskGraphResultsCmp_checkCodeGraph(const char *filename, const char *codeFileName)
{
  void *res = mmc_mk_nil();
  Graph g1;
  Graph g2;
  GraphMLParser parser;
  GraphCodeParser codeParser;
  std::string errorMsg = std::string("");

  if (!GraphMLParser::CheckIfFileExists(filename))
  {
    errorMsg = "File '";
    errorMsg += std::string(filename);
    errorMsg += "' does not exist";
    res = mmc_mk_cons(mmc_mk_scon(errorMsg.c_str()), mmc_mk_nil());
    return res;
  }

  if (!GraphMLParser::CheckIfFileExists(codeFileName))
  {
    errorMsg = "File '";
    errorMsg += std::string(codeFileName);
    errorMsg += "' does not exist";
    res = mmc_mk_cons(mmc_mk_scon(errorMsg.c_str()), mmc_mk_nil());
    return res;
  }

  parser.ParseGraph(&g1, filename, NodeComparator(&NodeComparator::CompareNodeNamesInt), &errorMsg);
  codeParser.ParseGraph(&g2, codeFileName, NodeComparator(&NodeComparator::CompareNodeNamesInt), &errorMsg);

  if (GraphComparator::CompareGraphs(&g1, &g2, NodeComparator(&NodeComparator::CompareNodeIdsInt),EdgeComparator(&EdgeComparator::CompareEdgesByNodeIdsInt), false, false, FULL, &errorMsg))
    res = mmc_mk_cons(mmc_mk_scon("Codegraph correct"), mmc_mk_nil());
  else
    res = mmc_mk_cons(mmc_mk_scon("Codegraph not correct"), mmc_mk_nil());

  if (errorMsg.length() != 0)
    res = mmc_mk_cons(mmc_mk_scon(errorMsg.c_str()), res);

  return res;
}
Ejemplo n.º 4
0
bool PriorityQueue<N, Val>::chgPrioirity(const N& node, Val priority) {
  bool issuccess = false;
  NodePriority newqelement;
  newqelement.node = node;
  newqelement.priority = priority;
  typename std::vector<NodePriority>::iterator chgiter = findElement(
      newqelement);
  if (chgiter != nodetracker.end()) {
    chgiter->priority = priority;
    std::make_heap(nodetracker.begin(), nodetracker.end(), NodeComparator());
    issuccess = true;
  }
  return issuccess;
}
Ejemplo n.º 5
0
int main() {
  /* Deschidem un fisier si citim din el configuratia initiala si finala. */
  std::ifstream in("src-lab11/Puzzle.in");

  /* Dimensiunea puzzel-ului este setata global, per clasa. */
  in >> Node::N;
  Node* initial_node = new Node();
  Node* solution_node = new Node();
  in >> *initial_node >> *solution_node;

  std::cout << *initial_node << std::endl;
  std::cout << *solution_node << std::endl;

  /* Pentru nodurile in curs de explorare, implementate ca o coada de
   * prioritati. */
  std::priority_queue<Node*, std::vector<Node*>, NodeComparator> open(
      NodeComparator(NodeComparator::AStarOptimized, solution_node));

  /* Initial doar nodul de start este in curs de explorare. */
  initial_node->set_distance(0);
  initial_node->set_parent(NULL);
  open.push(initial_node);

  /* Pentru nodurile care au fost deja expandate. */
  std::vector<Node*> closed;

  do {
    if (open.empty()) {
      std::cout << "Nu a fost gasita nicio solutie." << std::endl;
      break;
    }

    Node* next = open.top(); 
    open.pop();

    if (next->has_same_state(*solution_node)) {
      std::cout << "A fost gasita solutia:" << std::endl;
      next->print_path();
      delete next;
      break;
    }

    /* Se exploreaza doar nodurile care nu au fost explorate deja. */
    if (!is_explored(closed, *next)) {
      /* Explorarea nodului este finalizata. */
      closed.push_back(next);

      /* Lista vecinilor. */
      std::vector<Node*> expand_next;
      next->expand(expand_next);
      for (std::vector<Node*>::iterator it = expand_next.begin();
           it != expand_next.end();
           ++it) {
        open.push(*it);
      }
    } else {
      delete next;
    }
  } while (true);

  /* Eliberare memoria folosită de noduri. */
  while (!open.empty()) {
    delete open.top();
    open.pop();
  }

  for (std::vector<Node*>::iterator it = closed.begin(); it != closed.end();
       ++it) {
    delete *it;
  }

  delete solution_node;

  return 0;
}
Ejemplo n.º 6
0
bool GraphComparator::CompareGraphs(Graph *g1, Graph *g2, CompareMode mode, std::string *errorMsg)
{
  return GraphComparator::CompareGraphs(g1, g2, NodeComparator(&NodeComparator::CompareNodeNamesInt), EdgeComparator(&EdgeComparator::CompareEdgesByNodeNamesInt), true, true, mode, errorMsg);
}