Advertisement
anden3

Untitled

Jan 3rd, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.51 KB | None | 0 0
  1. // Problem_2.__Social_Network.cpp : This file contains the 'main' function. Program execution begins and ends there.
  2. //
  3.  
  4. #include <set>
  5. #include <queue>
  6. #include <iostream>
  7. #include <vector>
  8. #include <string>
  9. #include <algorithm>
  10. #include <stdlib.h>
  11.  
  12. struct Node {
  13.     char id;
  14.     std::vector<Node*> children;
  15. };
  16.  
  17. std::set<Node*> friends;
  18. std::set<Node*> adversaries;
  19. std::queue<Node*> nodeQueue;
  20.  
  21. void printFSet(Node* n) {
  22.     std::cout << "Friends: " << n->id << "\n";
  23. }
  24.  
  25. void printASet(Node* n) {
  26.     std::cout << "Adversaries: " << n->id << "\n";
  27. }
  28.  
  29.  
  30. void eachNode(Node* child) {
  31.     if (friends.find(child) == friends.end() || adversaries.find(child) == adversaries.end()) {
  32.         nodeQueue.push(child);
  33.     }
  34. }
  35.  
  36. //Node randomTree(int layers, int maxChildren) {
  37. //  Node root;
  38. //  Node lastRoot;
  39. //
  40. //  std::list<std::list<Node>> roots;
  41. //
  42. //  for (int i = 0; i < layers; i++)
  43. //  {
  44. //      std::list<Node> layerNodes;
  45. //      roots.push_back(layerNodes);
  46. //
  47. //      int children = rand() % maxChildren;
  48. //
  49. //      for (int y = 0; y < children; y++)
  50. //      {
  51. //          Node child;
  52. //          layerNodes.push_back(child);       
  53. //          lastRoot.children.push_back(child);
  54. //      }
  55. // 
  56. //      //lastRoot = subtree_root;
  57. //  }
  58. //}
  59.  
  60.  
  61. void breadthFirst(Node* g) {
  62.     int level = 0;
  63.  
  64.     // Initialize
  65.     nodeQueue.push(g);
  66.  
  67.     // For each node on the current level expand and process, if no children
  68.     // (leaf) then unwind
  69.     while (!nodeQueue.empty())
  70.     {
  71.         Node* subtree_root = nodeQueue.front();
  72.         nodeQueue.pop();
  73.  
  74.         for (Node* n : subtree_root->children) {
  75.             eachNode(n);
  76.         }
  77.         // std::for_each(subtree_root->children.front(), subtree_root->children.back(), eachNode);
  78.  
  79.         if (level % 2 == 0) {
  80.             friends.insert(subtree_root);
  81.         }
  82.         else
  83.         {
  84.             adversaries.insert(subtree_root);
  85.         }
  86.  
  87.         level++;
  88.     }
  89. }
  90.  
  91. int main()
  92. {
  93.     Node* root = new Node();
  94.     root->id = '0';
  95.     Node n1;
  96.     n1.id = '1';
  97.     Node n2;
  98.     n2.id = '2';
  99.     Node n3;
  100.     n3.id = '3';
  101.     Node n4;
  102.     n4.id = '4';
  103.     Node n5;
  104.     n5.id = '5';
  105.     Node n6;
  106.     n6.id = '6';
  107.     Node n7;
  108.     n7.id = '7';
  109.     Node n8;
  110.     n8.id = '8';
  111.     Node n9;
  112.     n9.id = '9';
  113.  
  114.     root->children.push_back(&n1);
  115.     root->children.push_back(&n2);
  116.     n1.children.push_back(&n3);
  117.     n1.children.push_back(&n4);
  118.     n2.children.push_back(&n5);
  119.     n3.children.push_back(&n6);
  120.     n6.children.push_back(&n7);
  121.     n4.children.push_back(&n8);
  122.     n7.children.push_back(&n9);
  123.  
  124.     breadthFirst(root);
  125.  
  126.     std::for_each(friends.begin(), friends.end(), printFSet);
  127.     std::for_each(adversaries.begin(), adversaries.end(), printASet);
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement