Пример #1
0
void Structure::Print(int level) const
{
    if(level > 0)
    {
        // print nodes
        std::cout << "List of Nodes:" << std::endl;
        for(std::size_t i = 0; i < NumberOfNodes(); ++i)
            mpNodes[i]->Print();
    }

    if(level > 1)
    {
        std::cout << "================================================" << std::endl;
        std::cout << "List of Elements:" << std::endl;
        // print elements
        for(std::size_t i = 0; i < NumberOfElements(); ++i)
            mpElements[i]->Print();

        std::cout << "================================================" << std::endl;
        std::cout << "List of Conditions:" << std::endl;
        // print conditions
        for(std::size_t i = 0; i < NumberOfConditions(); ++i)
            mpConditions[i]->Print();
    }
}
Пример #2
0
TEST_F(SimpleGraphTests, KargerMinCut)
{
    //    3-----4--5-----6
    //    | \ / |  | \ / |
    //    | / \ |  | / \ |
    //    2-----1--7-----8
    // - Expected result: 2
    //     min cuts are[(1, 7), (4, 5)]
    auto start = std::chrono::steady_clock::now();
	auto graph = Graph();
	graph.ReadAdjacencyList("kargerMinCutSimple.txt", ListTypes::kNoWeights);
    for (auto i = 1; i < 200; ++i)
    {
        do
        {
            graph.KargerStep();
        } 
        while (graph.NumberOfNodes() > 2);
        graph.CheckBest();
        graph.GraphRefresh();
    }
    auto end = std::chrono::steady_clock::now();
    auto diff = end - start;
    auto time_in_ms = std::chrono::duration <double, std::milli>(diff).count();
    EXPECT_EQ(graph.MinCut(), 2);
}
Пример #3
0
// This is a sample solution to the "Sum all integers" problem. Each node sums
// the elements that belong to it (that is, the ones with position equal to
// MyNodeId() modulo NumberOfNodes()).
//
// To showcase the communication a bit better, instead of sending all the
// results to a "master" node, each node sends its result to the next one,
// accumulating the result from the previous node. The last node prints the
// final result.
int main() {
  long long sum = 0LL;
  for (long long pos = MyNodeId(); pos < GetN(); pos += NumberOfNodes()) {
    sum += GetNumber(pos);
  }
  if (MyNodeId() > 0) {
    Receive(MyNodeId() - 1);
    sum += GetLL(MyNodeId() - 1);
  }
  if (MyNodeId() < NumberOfNodes() - 1) {
    PutLL(MyNodeId() + 1, sum);
    Send(MyNodeId() + 1);
  } else {
    printf("%lld\n", sum);
  }
  return 0;
}
Пример #4
0
void AQuadTree::Initialize()
{
	m_TotalTreeID = 0;

	m_TotalLeaves = (m_QuadTreeSize / (m_LeafWidth - 1)) * (m_QuadTreeSize / (m_LeafWidth - 1));

	m_NodeCount = NumberOfNodes(m_TotalLeaves, m_LeafWidth - 1);
}
Пример #5
0
int main() {
  long long N = GetN();
  long long nodes = NumberOfNodes();
  long long my_id = MyNodeId();
  long long _min = LLONG_MAX;
  long long _max = LLONG_MIN;
  int found = 0;
  for (long long i = my_id; i < N; i += nodes) {
    long long number = GetNumber(i);
    if(found == 0) {
      found = 1;
      _min = number;
      _max = number;
    }
    else {
      if(_min > number) {
        _min = number;
      }
      if(_max < number) {
        _max = number;
      }
    }
  }
  if (found == 1) {
    PutLL(MASTER_NODE, 1);
    PutLL(MASTER_NODE, _min);
    PutLL(MASTER_NODE, _max);
  }
  PutLL(MASTER_NODE, DONE);
  Send(MASTER_NODE);

  if (my_id == MASTER_NODE) {
    long long global_min = LLONG_MAX;
    long long global_max = LLONG_MIN;
    for (int node = 0; node < nodes; ++node) {
      long long received1 = 0;
      long long received2 = 0;
      Receive(node);
      received1 = GetLL(node);
      if(received1 == 1) {
        received1 = GetLL(node);
        received2 = GetLL(node);
        if(global_min > received1) {
          global_min = received1;
        }
        if(global_max < received2) {
          global_max = received2;
        }
      }
    }
    printf("%lld\n", global_max - global_min);
  }
  return 0;
}
int main() {
  long long N = GetN();
  long long nodes = NumberOfNodes();
  long long my_id = MyNodeId();
  long long best_so_far = 0LL;
  for (long long i = 0; i < N; ++i) {
    for (long long j = 0; j < N; ++j) {
      if (j % nodes == my_id) {
        long long candidate = GetNumber(i) - GetNumber(j);
        if (candidate > best_so_far) {
          best_so_far = candidate;
          PutLL(MASTER_NODE, candidate);
          Send(MASTER_NODE);
        }
      }
    }
  }
  PutLL(MASTER_NODE, DONE);
  Send(MASTER_NODE);

  if (my_id == MASTER_NODE) {
    long long global_best_so_far = 0;
    for (int node = 0; node < nodes; ++node) {
      long long received_candidate = 0;
      while (true) {
        Receive(node);
        received_candidate = GetLL(node);
        if (received_candidate == DONE) {
          break;
        }
        if (received_candidate > global_best_so_far) {
          global_best_so_far = received_candidate;
        }
      }
    }
    printf("%lld\n", global_best_so_far);
  }
  return 0;
}
Пример #7
0
static void CheckNodeId(int node) {
  if (!DEBUG) return;
  if (node < 0 || node >= NumberOfNodes()) Die("Incorrect machine number");
}
Пример #8
0
void Structure::AddDof(Dof& rDof)
{
    for(std::size_t i = 0; i < NumberOfNodes(); ++i)
        mpNodes[i]->AddDof(rDof);
}