写一个C++代码图的各种存储结构,各种操作的算法实现(建立、遍历、有向图和无向图的几个 重要算法)
时间: 2024-11-16 09:27:23 浏览: 27
C++有向图的深度优先和广度优先遍历等13项基础操作(代码共700行,可运行无错误).rar
5星 · 资源好评率100%
在C++中,图的数据结构可以使用多种方式实现,常见的有邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix)。下面我会简述这两种数据结构以及对应的创建、遍历和一些基本算法:
**1. 邻接表**:
```cpp
// 使用STL的list实现邻接表
typedef std::vector<std::list<int>> AdjList; // 存储每个顶点的邻接节点
class Graph {
private:
int V; // 顶点数
AdjList adj;
public:
Graph(int v) : V(v), adj(v) {} // 构造函数
void addEdge(int src, int dest) { // 添加边
adj[src].push_back(dest);
}
// 遍历邻接表
void traverse() {
for (int i = 0; i < V; ++i) {
std::cout << "顶点 " << i << ": ";
for (auto it = adj[i].begin(); it != adj[i].end(); ++it)
std::cout << *it << " ";
std::cout << "\n";
}
}
};
```
**2. 邻接矩阵**:
```cpp
// 使用二维数组表示邻接矩阵
bool matrix[100][100]; // 对于V=100的图
Graph matrixGraph(int v) {
Graph g(v);
// 初始化全为false表示无边
for (int i = 0; i < v; ++i)
for (int j = 0; j < v; ++j)
matrix[i][j] = false;
// ... 然后添加边并更新矩阵对应位置
}
void DFS(Graph& g, int start) { // 深度优先搜索
bool visited[v];
// ... 实现DFS算法...
}
```
对于有向图和无向图,主要是邻接表的表示稍有差异,无向图中会将每条边双向添加到两个顶点的邻接列表中。重要的算法包括深度优先搜索(DFS)、广度优先搜索(BFS)、拓扑排序、最短路径算法(如Dijkstra或Floyd-Warshall)等。
阅读全文