我只是从图论开始的。我不知道如何使用链接列表编码邻接列表。例如,如果我有此图(无向):

A--------B
|       /|\
|      / | \
|     /  |  \
|    /   |   \
|   /    |    \
|  /     |     \
| /      |      \
C        E-------D

我该如何编码?我知道如何使用邻接矩阵来执行此操作,但是如何使用邻接表和链接列表(C++)对其进行编码?

最佳答案

邻接列表只是列表的 vector/数组。图中的每个元素都是数组中的一个元素,并且任何边都添加到它的邻接表中。因此,它看起来像:

A-> {B,C}

B-> {A,C,D,E}

C-> {A,B}

D-> {B,E}

E-> {B,D}

因此,我们从std::vector<std::list<vertex>>之类的东西开始。但是,我们可以做得更好,因为顶点是唯一的,因此我们可以使用map。此外,顶点只能在边缘列表中出现一次,因此我们将其修改为std::map<vertex, std::set<vertex>>

首先,类似:

struct vertex
{
   //
};

class undirected_graph
{
private:
    std::map<vertex, std::set<vertex>> graph_container;
public:
    void add_vertex(const vertex& v) { //add a vertex to the map }
    void add_edge(const vertex& v, const vertex& u) { //look up vertex in map and add to the vertex adjacency list }
    //Other methods
    //...
 };

关于c++ - 邻接表图形表示的实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14133115/

10-11 20:55