21xrx.com
2024-11-22 06:36:41 Friday
登录
文章检索 我的文章 写文章
C++图的邻接表顶点表的数据类型
2023-07-12 17:54:45 深夜i     --     --
C++ 邻接表 顶点表 数据类型

C++中,邻接表顶点表是用于表示图的一种常见的数据结构。它被组织成了一个由顶点链表和边链表构成的链表。每个顶点链表中都包含了指向其相邻节点的指针,并且边链表中储存了所有的边。

在C++中,邻接表顶点表的数据类型可以通过创建一个类来完成。该类应该包含一个指向顶点表的指针,并且还应该储存有关图总共有多少个节点和多少个边的信息。

下面是一种可能的C++顶点表类的实现:


#include <iostream>

#include <vector>

using namespace std;

// 定义一个图的节点结构

struct Node {

  int id;

  Node* next;

  Node(int id)

    this->id = id;

    next = nullptr;

  

};

// 图的邻接表顶点表类

class VertexList {

private:

  int verticesCount; // 图的节点数

  int edgesCount;   // 图的边数

  vector<Node*> list; // 邻接表顶点表

public:

  VertexList(int verticesCount) {

    this->verticesCount = verticesCount;

    // 初始化邻接表顶点表

    for (int i = 0; i < verticesCount; i++) {

      list.push_back(nullptr);

    }

    edgesCount = 0;

  }

  // 添加一条边

  void addEdge(int fromVertex, int toVertex) {

    Node* node = new Node(toVertex);

    node->next = list[fromVertex];

    list[fromVertex] = node;

    edgesCount++;

  }

  // 获取给定节点的相邻节点列表

  vector<int> getAdjacentNodes(int vertex) {

    vector<int> adjacents;

    Node* currentNode = list[vertex];

    while (currentNode) {

      adjacents.push_back(currentNode->id);

      currentNode = currentNode->next;

    }

    return adjacents;

  }

  // 获取图的节点数

  int getVerticesCount() const

    return verticesCount;

  

  // 获取图的边数

  int getEdgesCount() const

    return edgesCount;

  

};

int main() {

  // 初始化一个包含5个节点的图

  VertexList vl(5);

  vl.addEdge(0, 1);

  vl.addEdge(1, 2);

  vl.addEdge(1, 3);

  vl.addEdge(3, 2);

  vl.addEdge(3, 4);

  // 输出所有的边

  cout << "Edges List: " << endl;

  for (int i = 0; i < vl.getVerticesCount(); i++) {

    vector<int> adjacents = vl.getAdjacentNodes(i);

    for (int j = 0; j < adjacents.size(); j++) {

      cout << i << " -> " << adjacents[j] << endl;

    }

  }

  // 输出图的节点数和边数

  cout << "Vertices Count: " << vl.getVerticesCount() << endl;

  cout << "Edges Count: " << vl.getEdgesCount() << endl;

  return 0;

}

以上代码创建了一个`VertexList`类,并提供了向邻接表中添加边、获取给定节点相邻节点的方法。此外,它还允许获取和储存有关图的节点数和边数的信息。通过这个类,我们可以方便地管理和操作图的邻接表顶点表。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复