1、C++实现图的邻接矩阵和邻接表的存储。 (1)建立图1的邻接表存储结构并输出; (2)建立图1的邻接矩阵存储结构并输出。 图1
时间: 2024-03-01 10:52:15 浏览: 98
很抱歉,我是一名自然语言处理模型,无法展示图片和代码,但我可以提供相关的文字解释。
对于图的存储方式,邻接矩阵和邻接表是两种常见的方法。
邻接矩阵是一个二维矩阵,其中行和列表示图中的节点,矩阵中的每个元素表示节点之间的关系,如是否存在边。如果节点i和节点j之间存在一条边,则邻接矩阵中第i行第j列的元素为1,否则为0。
邻接表则是由链表组成的数组,其中数组中每个元素对应一个节点,链表中存放该节点所连接的其他节点。每个链表节点包含两个部分,一个是指向连接节点的指针,另一个是该边的权重。
以下是C++的邻接表和邻接矩阵的实现示例:
邻接表:
```c++
#include <iostream>
#include <vector>
using namespace std;
struct Edge {
int dest; // 目标节点
int weight; // 边的权重
Edge* next; // 指向下一个边的指针
};
vector<Edge*> graph; // 邻接表
void addEdge(int src, int dest, int weight) {
Edge* newEdge = new Edge;
newEdge->dest = dest;
newEdge->weight = weight;
newEdge->next = graph[src];
graph[src] = newEdge;
}
void printGraph() {
for (int i = 0; i < graph.size(); i++) {
cout << i << ":";
Edge* cur = graph[i];
while (cur != nullptr) {
cout << " -> " << cur->dest << "(" << cur->weight << ")";
cur = cur->next;
}
cout << endl;
}
}
int main() {
int V = 5; // 节点数
graph.resize(V, nullptr);
addEdge(0, 1, 2);
addEdge(0, 2, 4);
addEdge(1, 2, 1);
addEdge(1, 3, 7);
addEdge(2, 3, 3);
addEdge(3, 4, 1);
printGraph();
return 0;
}
```
邻接矩阵:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> graph; // 邻接矩阵
void addEdge(int src, int dest, int weight) {
graph[src][dest] = weight;
}
void printGraph() {
for (int i = 0; i < graph.size(); i++) {
for (int j = 0; j < graph[i].size(); j++) {
cout << graph[i][j] << " ";
}
cout << endl;
}
}
int main() {
int V = 5; // 节点数
graph.resize(V, vector<int>(V, 0));
addEdge(0, 1, 2);
addEdge(0, 2, 4);
addEdge(1, 2, 1);
addEdge(1, 3, 7);
addEdge(2, 3, 3);
addEdge(3, 4, 1);
printGraph();
return 0;
}
```
以上是C++实现图的邻接矩阵和邻接表的存储的示例代码。
阅读全文