olexander_dan

Untitled

Aug 2nd, 2019
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. size_t* maxDist(bool** m, const size_t& size) {
  2.     size_t* resDist = new size_t[size];
  3.     for (size_t i = 0; i < size; ++i) {
  4.         resDist[i] = maxDistUtil(m, i, size);
  5.     }
  6.     return resDist;
  7. }
  8.  
  9. size_t maxDistUtil(bool** m, const size_t& v, const size_t& size) {
  10.     bool* visited = new bool[size] {};
  11.     visited[v] = true;
  12.  
  13.     size_t dist = 0;
  14.     std::queue<size_t> stack;
  15.     for (auto&& i : adjVertices(m, v, size))
  16.         stack.push(i);
  17.  
  18.     while (!stack.empty()) {
  19.         size_t& p = stack.front();
  20.         stack.pop();
  21.        
  22.  
  23.         for (auto&& i : adjVertices(m, p, size)) {
  24.             if (!visited[i]) {
  25.                 visited[i] = true;
  26.                 stack.push(i);
  27.                 ++dist;
  28.             }
  29.         }
  30.         visited[p] = true;
  31.     }
  32.     delete[]visited;
  33.     return dist;
  34. }
  35.  
  36. std::vector<size_t> adjVertices(bool** m, const size_t& v, const size_t& size) {
  37.     std::vector<size_t> adj;
  38.     for (size_t i = 0; i < size; ++i)
  39.         if (m[v][i])
  40.             adj.push_back(i);
  41.     adj.shrink_to_fit();
  42.     return adj;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment