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(); } }
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); }
// 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; }
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); }
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; }
static void CheckNodeId(int node) { if (!DEBUG) return; if (node < 0 || node >= NumberOfNodes()) Die("Incorrect machine number"); }
void Structure::AddDof(Dof& rDof) { for(std::size_t i = 0; i < NumberOfNodes(); ++i) mpNodes[i]->AddDof(rDof); }