map 实现无相图去重,c++
时间: 2024-12-19 12:27:22 浏览: 6
atat2_71.tar.gz_Windows编程_C++_
在C++中,使用`map`实现无向图去重通常是通过为每个节点维护一个集合(set或unordered_set),来保证每个节点只出现一次。由于`map`的关键字不允许重复,所以可以将节点(如整数或自定义类型)作为key,然后添加到这个集合中。当从另一个节点开始遍历时,只需要检查目标节点是否已经在集合中存在即可判断是否已访问过。
下面是一个简单的示例,假设我们有一个包含整数节点的无向图:
```cpp
#include <unordered_map>
#include <unordered_set>
struct Node {
int id;
};
bool visited(std::unordered_map<Node, std::unordered_set<Node>>& graph, const Node& node) {
return graph[node].find(node.id) != graph[node].end(); // 判断node是否存在
}
void removeDuplicates(std::unordered_map<Node, std::unordered_set<Node>>& graph) {
for (const auto& pair : graph) {
if (!visited(graph, pair.first)) { // 当前节点未访问
for (const auto& neighbor : pair.second) { // 遍历邻居
if (!visited(graph, neighbor)) {
graph[neighbor].insert(pair.first); // 添加当前节点到邻居的邻接集合
}
}
graph[pair.first].clear(); // 清空当前节点的邻接集合,表示已经访问过了
}
}
}
阅读全文