数据结构-图
2023-12-13 09:11:48
介绍
图(Graph)是一种非线性数据结构,由节点(顶点)和边组成。节点表示实体,而边表示这些实体之间的关系。图可以分为有向图和无向图两种。
图分类
- 有向图:边具有方向性,从一个节点指向另一个节点。在有向图中,节点之间的关系是单向的。
- 无向图:边没有方向性,连接两个节点。在无向图中,节点之间的关系是双向的。
图的特点
- 节点可以有多个相邻节点,节点的数量没有限制。
- 边可以连接任意两个节点,表示节点之间的关系。
- 图中的节点和边可以具有权重,表示某种度量或成本。
实现举例
#include <iostream>
#include <vector>
using namespace std;
class Graph {
private:
vector<vector<int>> adjList;
int numVertices;
public:
Graph(int vertices): numVertices(vertices) {
adjList.resize(vertices);
}
void addEdge(int u, int v) {
adjList[u].push_back(v);
adjList[v].push_back(u); // 对于无向图,需要添加双向边
}
void printGraph() {
for (int i = 0; i < numVertices; i++) {
cout << "Vertex " << i << ": ";
for (int j : adjList[i]) {
cout << j << " ";
}
cout << endl;
}
}
};
int main() {
Graph g(5); // 创建一个包含5个顶点的图
g.addEdge(0, 1); // 添加边 (0, 1)
g.addEdge(0, 4); // 添加边 (0, 4)
g.addEdge(1, 2); // 添加边 (1, 2)
g.addEdge(1, 3); // 添加边 (1, 3)
g.addEdge(1, 4); // 添加边 (1, 4)
g.addEdge(2, 3); // 添加边 (2, 3)
g.addEdge(3, 4); // 添加边 (3, 4)
g.printGraph(); // 打印图的信息
return 0;
}
实例说明
在示例中,创建了一个Graph
类,它使用一个邻接列表来存储节点和边的信息。addEdge
函数用于添加边,并使用双向连接来表示无向图。printGraph
函数用于打印图的邻接列表。在main
函数中,创建了一个包含5个顶点的图,并添加了一些边。最后,调用printGraph
函数来打印图的信息。
总结
图数据结构在实际应用中具有广泛的用途,例如:
- 社交网络分析:将用户作为节点,用户之间的关系作为边,可以分析社交网络中的连接和影响力。
- 地图导航:将地点作为节点,道路作为边,可以使用图算法计算最短路径、最快路径等。
- 网络流量优化:将网络设备作为节点,连接设备的通信线路作为边,可以使用图算法优化网络流量和提高网络性能。
- 推荐系统:将用户和物品作为节点,用户对物品的喜好程度作为边,可以使用图算法为用户推荐相关物品。
常见的图算法包括深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(Dijkstra、Floyd-Warshall等)、最小生成树算法(Prim、Kruskal等)等。这些算法可以用于遍历图、查找路径、优化网络等任务。
文章来源:https://blog.csdn.net/scy518/article/details/134962562
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!