c++实现图的邻接表或邻接矩阵表示,并创建图:
时间: 2023-11-25 15:23:04 浏览: 88
好的,我可以帮你提供一些 C++ 代码示例来实现图的邻接表或邻接矩阵表示,并创建图。
首先是邻接表的实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 定义图的邻接表表示
struct Graph {
int V; // V 表示图的节点数
vector<int> *adj; // adj 表示每个节点的邻居节点列表
Graph(int V) {
this->V = V;
adj = new vector<int>[V];
}
void addEdge(int u, int v) {
adj[u].push_back(v);
adj[v].push_back(u); // 如果是无向图,则需要加上这一句
}
void printGraph() {
for (int i = 0; i < V; i++) {
cout << "Node " << i << " has neighbors: ";
for (auto j : adj[i]) {
cout << j << " ";
}
cout << endl;
}
}
};
int main() {
Graph g(5); // 创建一个有 5 个节点的图
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(1, 2);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(3, 4);
g.printGraph(); // 输出图的邻接表形式
return 0;
}
```
上述代码中,我们先定义了一个结构体 `Graph` 来表示图,其中 `V` 表示图的节点数,`adj` 是每个节点的邻居节点列表。接着,我们实现了 `addEdge` 函数来添加边,然后实现了 `printGraph` 函数来输出邻接表的形式。
接下来是邻接矩阵的实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 定义图的邻接矩阵表示
struct Graph {
int V; // V 表示图的节点数
vector<vector<int>> adj; // adj 表示每个节点之间的关系
Graph(int V) {
this->V = V;
adj.resize(V, vector<int>(V, 0));
}
void addEdge(int u, int v) {
adj[u][v] = 1;
adj[v][u] = 1; // 如果是无向图,则需要加上这一句
}
void printGraph() {
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
cout << adj[i][j] << " ";
}
cout << endl;
}
}
};
int main() {
Graph g(5); // 创建一个有 5 个节点的图
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(1, 2);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(3, 4);
g.printGraph(); // 输出图的邻接矩阵形式
return 0;
}
```
上述代码中,我们同样定义了一个结构体 `Graph` 来表示图,其中 `V` 表示图的节点数,`adj` 是每个节点之间的关系。接着,我们实现了 `addEdge` 函数来添加边,然后实现了 `printGraph` 函数来输出邻接矩阵的形式。
希望这些代码示例能够帮助你实现图的邻接表或邻接矩阵表示,并创建图。如果你还有其他问题,可以随时问我。
阅读全文