假设带权有向图G采用邻接表存储,用c++设计一个算法输出顶点i的所有入边邻接点。
时间: 2024-10-21 09:03:03 浏览: 30
在C++中,如果使用邻接表(即链表或数组形式)来表示带权有向图G,可以使用类似以下的步骤设计一个算法来输出顶点i的所有入边邻接点:
```cpp
#include <iostream>
#include <list> // 使用list作为邻接表节点的数据结构
// 定义邻接表节点结构
struct Edge {
int destination; // 目标顶点
int weight; // 边权重
};
class Graph {
private:
std::list<Edge> *adj; // 邻接列表,每个顶点对应一个链表
int V; // 图中顶点的数量
public:
// 构造函数
Graph(int v) : adj(new std::list<Edge>[v]), V(v) {}
// 添加边的方法
void addEdge(int src, int dest, int w) {
adj[src].push_back({dest, w});
}
// 输出顶点i所有入边的方法
void printInEdges(int i) {
if (adj[i].empty()) {
std::cout << "Vertex " << i << " has no incoming edges.\n";
} else {
std::cout << "Incoming edges to vertex " << i << " are:\n";
for (const auto &edge : adj[i]) {
std::cout << edge.destination << " - Weight: " << edge.weight << "\n";
}
}
}
// 释放内存
~Graph() {
delete[] adj;
}
};
int main() {
Graph g(5); // 创建一个包含5个顶点的图
g.addEdge(0, 1, 7);
g.addEdge(0, 4, 9);
g.addEdge(1, 2, 5);
g.addEdge(2, 3, 15);
g.addEdge(2, 4, 3);
g.addEdge(3, 3, 7);
g.addEdge(3, 4, 11);
// 输出顶点0和2的入边
std::cout << "Incoming edges of vertex 0: ";
g.printInEdges(0);
std::cout << "Incoming edges of vertex 2: ";
g.printInEdges(2);
return 0;
}
阅读全文