#ifndef ASH_PUBLIC_CPP_TAB_CLUSTER_UNDIRECTED_GRAPH_H_
#define ASH_PUBLIC_CPP_TAB_CLUSTER_UNDIRECTED_GRAPH_H_
#include <map>
#include <vector>
#include "ash/public/cpp/ash_public_export.h"
namespace ash {
class ASH_PUBLIC_EXPORT UndirectedGraph {
public:
UndirectedGraph();
~UndirectedGraph();
UndirectedGraph(const UndirectedGraph& other);
UndirectedGraph& operator=(const UndirectedGraph& other) = default;
void AddUndirectedEdgeAndNodeWeight(size_t from_node, size_t to_node);
size_t NumNodes() const;
size_t NodeWeight(size_t id) const;
const std::map<size_t, double>& Neighbors(size_t id) const;
size_t total_node_weight() const { return total_node_weight_; }
private:
void AddEdge(size_t from_node, size_t to_node);
void AddNodeWeight(size_t id);
void EnsureSize(size_t id);
std::vector<std::map<size_t, double>> adjacency_lists_;
std::vector<double> node_weights_;
size_t total_node_weight_ = 0;
};
}
#endif