数据结构中无向网邻接表的画法
时间: 2023-11-26 08:47:43 浏览: 83
无向网邻接表的画法如下所示:
1. 定义一个结构体来表示邻接表中的边,包括边的起点、终点和权值等信息。
2. 定义一个结构体来表示邻接表中的顶点,包括顶点的名称和指向第一条依附该顶点的边的指针。
3. 创建一个数组,数组的每个元素都是一个顶点结构体,数组下标表示该顶点的编号。
4. 对于每一条边,创建一个边结构体,并将其插入到起点对应的顶点的边链表中。
5. 遍历整个数组,对于每个顶点,输出其名称以及依附该顶点的所有边的终点和权值等信息。
下面是一个C++实现无向网邻接表的例子:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 边结构体
struct Edge {
int start; // 起点
int end; // 终点
int weight; // 权值
Edge(int s, int e, int w) : start(s), end(e), weight(w) {}
};
// 顶点结构体
struct Vertex {
int name; // 顶点名称
vector<Edge*> edges; // 依附该顶点的边
Vertex(int n) : name(n) {}
};
// 无向网邻接表类
class Graph {
private:
vector<Vertex*> vertices; // 存储所有顶点的数组
public:
// 添加顶点
void addVertex(int name) {
Vertex* v = new Vertex(name); vertices.push_back(v);
}
// 添加边
void addEdge(int start, int end, int weight) {
Edge* e = new Edge(start, end, weight);
vertices[start]->edges.push_back(e);
vertices[end]->edges.push_back(e);
}
// 输出邻接表
void print() {
for (int i = 0; i < vertices.size(); i++) {
cout << "Vertex " << vertices[i]->name << ": ";
for (int j = 0; j < vertices[i]->edges.size(); j++) {
Edge* e = vertices[i]->edges[j];
int neighbor = (e->start == i) ? e->end : e->start;
cout << neighbor << "(" << e->weight << ") ";
}
cout << endl;
}
}
};
// 测试
int main() {
Graph g;
g.addVertex(0);
g.addVertex(1);
g.addVertex(2);
g.addVertex(3);
g.addEdge(0, 1, 2);
g.addEdge(0, 2, 3);
g.addEdge(1, 2, 1);
g.addEdge(1, 3, 4);
g.addEdge(2, 3, 5);
g.print();
return 0;
}
```