隣接リストは、グラフのエッジを表す一連のオブジェクトに過ぎません。
struct edge {
node *nodes[2];
edge(node *a, node *b) {
if (a < b) { // define canonical order of edges for undirected graph
nodes[0] = a;
nodes[1] = b;
} else {
nodes[0] = b;
nodes[1] = a;
}
}
};
リンクリストは特に実用的ではありません。通常、エッジの順序を定義し、std::set
またはstd::map
に入れます。
bool operator< (edge const &lhs, edge const &rhs) {
if (lhs.nodes[0] < rhs.nodes[0]) return true;
if (rhs.nodes[0] < lhs.nodes[0]) return false;
return lhs.nodes[1] < rhs.nodes[1];
}
typedef std::set<edge> graph;
これを行うには多くの方法がありますが、それはあなたがグラフをどうするつもり何を知らなくても、より多くの何を示唆するのは難しいです。
をなし、私は、グラフを描いたの隣接リストメソッドを実装する方法を知りたいです。 – Somebody