c++已知有一无向图如下图所示,现需编程接收用户输入的顶点数、边数、以及各顶点之间的关系,接收后将此无向图实现在程序中,并把图中各顶点和边的关系打印出来。
时间: 2024-12-14 08:29:28 浏览: 25
在 C++ 中,你可以使用邻接矩阵或邻接表来表示无向图,这取决于你需要频繁地查询两个顶点之间是否有边还是添加删除边。下面我会简述如何使用邻接列表实现这一功能。
首先,创建一个结构体或类 `Vertex` 来表示每个顶点,包含顶点编号和其邻居的列表。如果使用 C++ STL,可以使用 `std::vector` 或 `std::unordered_set`:
```cpp
#include <iostream>
#include <vector>
// 定义顶点类
class Vertex {
public:
int id;
std::vector<int> neighbors;
Vertex(int id) : id(id), neighbors() {}
};
```
接下来,创建一个类 `Graph` 来管理整个图形:
```cpp
class Graph {
private:
std::vector<Vertex> vertices;
public:
void addEdge(int u, int v) {
vertices[u].neighbors.push_back(v);
// 如果你想保持图的无向特性,还要添加 (v, u)
vertices[v].neighbors.push_back(u);
}
void printGraph() {
for (const auto& vertex : vertices) {
std::cout << "Vertex " << vertex.id << ": ";
for (int neighbor : vertex.neighbors) {
std::cout << neighbor << " ";
}
std::cout << "\n";
}
}
void receiveInput(int numVertices, int numEdges) {
vertices.resize(numVertices);
for (int i = 0; i < numEdges; ++i) {
int u, v;
std::cin >> u >> v;
addEdge(u, v);
}
}
};
int main() {
int numVertices, numEdges;
std::cout << "Enter number of vertices and edges: ";
std::cin >> numVertices >> numEdges;
Graph graph;
graph.receiveInput(numVertices, numEdges);
graph.printGraph();
return 0;
}
```
用户需要先输入顶点数和边数,然后每次输入两条边的信息(源节点和目标节点),程序会自动构建并打印出无向图。
阅读全文