인접 목록은 그래프 가장자리를 나타내는 개체 집합입니다.
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