请用C++写(1)以邻接矩阵形式创建一个无向图; (2)以邻接表的形式创建一个无向图。的代码
时间: 2023-12-29 19:03:00 浏览: 77
1. 以邻接矩阵形式创建一个无向图
```C++
#include <iostream>
using namespace std;
const int MAXN = 100;
class Graph_Matrix {
private:
int n; // 图的顶点数
int e; // 图的边数
int **matrix; // 邻接矩阵
public:
// 构造函数
Graph_Matrix(int n, int e): n(n), e(e) {
matrix = new int*[n];
for (int i = 0; i < n; i++) {
matrix[i] = new int[n];
for (int j = 0; j < n; j++) {
matrix[i][j] = 0; // 初始化为0
}
}
}
// 添加边
void addEdge(int u, int v) {
if (u >= n || v >= n) return; // 超出范围
matrix[u][v] = matrix[v][u] = 1; // 添加边
}
// 打印邻接矩阵
void printMatrix() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
// 析构函数
~Graph_Matrix() {
for (int i = 0; i < n; i++) {
delete[] matrix[i];
}
delete[] matrix;
}
};
int main() {
int n = 5, e = 7; // 5个顶点,7条边
Graph_Matrix g(n, e);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(0, 4);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 4);
g.addEdge(3, 4);
g.printMatrix();
return 0;
}
```
2. 以邻接表的形式创建一个无向图
```C++
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 100;
class Graph_List {
private:
int n; // 图的顶点数
int e; // 图的边数
vector<int> adj[MAXN]; // 邻接表
public:
// 构造函数
Graph_List(int n, int e): n(n), e(e) {}
// 添加边
void addEdge(int u, int v) {
if (u >= n || v >= n) return; // 超出范围
adj[u].push_back(v); // 添加边
adj[v].push_back(u);
}
// 打印邻接表
void printList() {
for (int i = 0; i < n; i++) {
cout << i << ": ";
for (auto j : adj[i]) {
cout << j << " ";
}
cout << endl;
}
}
};
int main() {
int n = 5, e = 7; // 5个顶点,7条边
Graph_List g(n, e);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(0, 4);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 4);
g.addEdge(3, 4);
g.printList();
return 0;
}
```
阅读全文