Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- size_t* maxDist(bool** m, const size_t& size) {
- size_t* resDist = new size_t[size];
- for (size_t i = 0; i < size; ++i) {
- resDist[i] = maxDistUtil(m, i, size);
- }
- return resDist;
- }
- size_t maxDistUtil(bool** m, const size_t& v, const size_t& size) {
- bool* visited = new bool[size] {};
- visited[v] = true;
- size_t dist = 0;
- std::queue<size_t> stack;
- for (auto&& i : adjVertices(m, v, size))
- stack.push(i);
- while (!stack.empty()) {
- size_t& p = stack.front();
- stack.pop();
- for (auto&& i : adjVertices(m, p, size)) {
- if (!visited[i]) {
- visited[i] = true;
- stack.push(i);
- ++dist;
- }
- }
- visited[p] = true;
- }
- delete[]visited;
- return dist;
- }
- std::vector<size_t> adjVertices(bool** m, const size_t& v, const size_t& size) {
- std::vector<size_t> adj;
- for (size_t i = 0; i < size; ++i)
- if (m[v][i])
- adj.push_back(i);
- adj.shrink_to_fit();
- return adj;
- }
Advertisement
Add Comment
Please, Sign In to add comment