Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test randomized ordering 0515 #440

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
sort Tarjan result
  • Loading branch information
edogawashinichi committed May 25, 2024
commit 5a7fa9bc09d889553ef297bce802f212b20310e4
40 changes: 39 additions & 1 deletion include/CXXGraph/Utility/Typedef.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ struct TarjanResult_struct {
false; // TRUE if the function does not return error, FALSE otherwise
std::string errorMessage = ""; // message of error
std::vector<T> vertexTraversalOrdering;
inline void show_ordering() const {
inline void showOrdering() const {
for (const auto& v : vertexTraversalOrdering) {
std::cout << v << " ";
}
Expand All @@ -229,6 +229,44 @@ struct TarjanResult_struct {
std::vector<Edge<T>> bridges; // a vector that stores bridges
// (valid only is a graph is undirected and
// flag TRAJAN_FIND_BRIDGES is set)
inline void sort() {
auto cmpNodeVec = [&](const auto& left, const auto& right) -> bool {
int i = 0;
while (left[i] == right[i]) {
++i;
if (i == left.size()) {
return true;
} else if (i == right.size()) {
return false;
}
}
return left[i].getData() < right[i].getData();
}; /// cmpNodeVec

/// SCC
for (auto& comp : stronglyConnectedComps) {
std::sort(comp.begin(), comp.end());
}
std::sort(stronglyConnectedComps.begin(), stronglyConnectedComps.end(), cmpNodeVec);

/// VBCC
for (auto& comp : verticeBiconnectedComps) {
std::sort(comp.begin(), comp.end());
}
std::sort(verticeBiconnectedComps.begin(), verticeBiconnectedComps.end(), cmpNodeVec);

/// EBCC
for (auto& comp : edgeBiconnectedComps) {
std::sort(comp.begin(), comp.end());
}
std::sort(edgeBiconnectedComps.begin(), edgeBiconnectedComps.end(), cmpNodeVec);

/// CUTV
std::sort(cutVertices.begin(), cutVertices.end());

/// BRIDGE
std::sort(bridges.begin(), bridges.end());
} /// sort
};
template <typename T>
using TarjanResult = TarjanResult_struct<T>;
Expand Down
18 changes: 13 additions & 5 deletions test/TarjanTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -345,17 +345,25 @@ TEST(TarjanTest, test_7) {
CXXGraph::TarjanResult<int> res =
graph.tarjan(CXXGraph::TARJAN_FIND_CUTV | CXXGraph::TARJAN_FIND_BRIDGE |
CXXGraph::TARJAN_FIND_EBCC | CXXGraph::TARJAN_FIND_VBCC);
{
cutvRes.sort();
bridgeRes.sort();
vbccRes.sort();
ebccRes.sort();
res.sort();
std::cout << "sort...\n";
}
{
std::cout << "cutvRes ordering:\n";
cutvRes.show_ordering();
cutvRes.showOrdering();
std::cout << "bridgeRes ordering:\n";
bridgeRes.show_ordering();
bridgeRes.showOrdering();
std::cout << "vbccRes ordering:\n";
vbccRes.show_ordering();
vbccRes.showOrdering();
std::cout << "ebccRes ordering:\n";
ebccRes.show_ordering();
ebccRes.showOrdering();
std::cout << "res ordering:\n";
res.show_ordering();
res.showOrdering();
}
ASSERT_EQ(res.success, true);

Expand Down
Loading