用C++实现实现图的邻接矩阵和邻接表的存储。 (1)建立图1的邻接表存储结构并输出; (2)建立图1的邻接矩阵存储结构并输出。
时间: 2024-02-03 16:15:15 浏览: 82
C++实现图的邻接表存储和广度优先遍历实例分析
5星 · 资源好评率100%
图1如下所示:
```
1
/ \
2 3
/ \ / \
4 5 6 7
```
邻接表存储结构:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 7; // 最大顶点数
// 邻接表存储结构
struct EdgeNode {
int to; // 边的终点
EdgeNode* next; // 指向下一条边的指针
};
struct VertexNode {
int val; // 顶点的值
EdgeNode* firstEdge; // 指向第一条边的指针
};
vector<VertexNode> adjList(MAXN+1);
void addEdge(int u, int v) {
EdgeNode* newEdge = new EdgeNode{v, nullptr};
newEdge->next = adjList[u].firstEdge;
adjList[u].firstEdge = newEdge;
}
void printAdjList() {
for (int i = 1; i <= MAXN; i++) {
cout << i << ": ";
EdgeNode* cur = adjList[i].firstEdge;
while (cur != nullptr) {
cout << cur->to << " ";
cur = cur->next;
}
cout << endl;
}
}
int main() {
// 添加边
addEdge(1, 2);
addEdge(1, 3);
addEdge(2, 4);
addEdge(2, 5);
addEdge(3, 6);
addEdge(3, 7);
// 输出邻接表
printAdjList();
return 0;
}
```
邻接矩阵存储结构:
```cpp
#include <iostream>
using namespace std;
const int MAXN = 7; // 最大顶点数
// 邻接矩阵存储结构
int adjMatrix[MAXN+1][MAXN+1];
void addEdge(int u, int v) {
adjMatrix[u][v] = 1;
}
void printAdjMatrix() {
for (int i = 1; i <= MAXN; i++) {
for (int j = 1; j <= MAXN; j++) {
cout << adjMatrix[i][j] << " ";
}
cout << endl;
}
}
int main() {
// 添加边
addEdge(1, 2);
addEdge(1, 3);
addEdge(2, 4);
addEdge(2, 5);
addEdge(3, 6);
addEdge(3, 7);
// 输出邻接矩阵
printAdjMatrix();
return 0;
}
```
阅读全文