c++类模板有向图G采用邻接矩阵存储,计算图中出度为零的顶点个数,写一段完整代码,不用#include<vertor>,用tempate<class T>
时间: 2024-02-25 14:58:57 浏览: 68
dsf.rar_有向图邻接表_有向邻接表
好的,以下是一段完整的 C++ 代码,用于计算邻接矩阵存储的有向图中出度为零的顶点个数,不使用 vector,只使用类模板和指针:
```c++
#include <iostream>
using namespace std;
template <class T>
class Graph {
public:
Graph(int n) : size(n) {
adj_matrix = new T*[n];
for (int i = 0; i < n; i++) {
adj_matrix[i] = new T[n];
for (int j = 0; j < n; j++) {
adj_matrix[i][j] = 0;
}
}
}
~Graph() {
for (int i = 0; i < size; i++) {
delete[] adj_matrix[i];
}
delete[] adj_matrix;
}
void add_edge(int from, int to, T weight) {
adj_matrix[from][to] = weight;
}
int zero_outdegree_count() const {
int count = 0;
for (int i = 0; i < size; i++) {
bool has_outgoing_edge = false;
for (int j = 0; j < size; j++) {
if (adj_matrix[i][j] != 0) {
has_outgoing_edge = true;
break;
}
}
if (!has_outgoing_edge) {
count++;
}
}
return count;
}
private:
int size;
T** adj_matrix;
};
int main() {
Graph<int> g(5);
g.add_edge(1, 3, 1);
g.add_edge(2, 1, 1);
g.add_edge(2, 4, 1);
g.add_edge(3, 2, 1);
g.add_edge(4, 5, 1);
g.add_edge(5, 2, 1);
int count = g.zero_outdegree_count();
cout << "Number of vertices with zero outdegree: " << count << endl;
return 0;
}
```
这段代码定义了一个 Graph 类模板,用于表示有向图。它使用邻接矩阵来存储图的边。其中,add_edge() 方法用于向图中添加一条从 from 到 to,权值为 weight 的有向边。zero_outdegree_count() 方法用于计算出度为零的顶点个数。在 main() 函数中,我们创建了一个有向图,并计算出度为零的顶点个数。注意,我们使用了 new 和 delete 运算符来动态分配和释放二维数组 adj_matrix。
阅读全文