定义图的邻接矩阵存储结构,并编写图的初始化、建立图、输出图、深度优先遍历、计算并输出图中每个顶点单度蹬操作实现代码
时间: 2023-08-11 11:03:44 浏览: 123
以下是一个基于C++的邻接矩阵存储图及其基本操作的代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
class Graph {
private:
int n; // 图中顶点数
vector<vector<int>> adj; // 邻接矩阵
public:
// 构造函数
Graph(int n) {
this->n = n;
adj.resize(n, vector<int>(n, 0));
}
// 添加边
void addEdge(int u, int v, int w) {
adj[u][v] = w;
adj[v][u] = w; // 对于无向图,需添加两次
}
// 深度优先遍历
void dfs(int u, vector<bool>& visited) {
visited[u] = true;
cout << u << " ";
for (int v = 0; v < n; v++) {
if (adj[u][v] != 0 && !visited[v]) {
dfs(v, visited);
}
}
}
// 计算单度顶点数
int getSingleDegree() {
int count = 0;
for (int i = 0; i < n; i++) {
int degree = 0;
for (int j = 0; j < n; j++) {
if (adj[i][j] != 0) {
degree++;
}
}
if (degree == 1) {
count++;
}
}
return count;
}
// 输出图
void printGraph() {
cout << "Graph:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << adj[i][j] << " ";
}
cout << endl;
}
}
};
// 初始化图
Graph initGraph() {
int n, m; // n为顶点数,m为边数
cout << "Input number of vertices and edges: ";
cin >> n >> m;
Graph g(n);
cout << "Input edges: (u, v, w)" << endl;
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
g.addEdge(u, v, w);
}
return g;
}
int main() {
Graph g = initGraph();
g.printGraph();
cout << "Single degree vertices: " << g.getSingleDegree() << endl;
cout << "DFS traversal: ";
vector<bool> visited(g.n, false);
g.dfs(0, visited);
cout << endl;
return 0;
}
```
上述代码中,我们定义了一个Graph类来表示邻接矩阵存储的图,并实现了图的初始化、建立图、输出图、深度优先遍历、计算单度顶点数等基本操作。其中,初始化图的函数initGraph()从标准输入中读取顶点数和边数,然后根据给定的边建立图。在main函数中,我们首先调用initGraph()函数初始化图,然后输出图的邻接矩阵表示,计算并输出单度顶点数,最后进行深度优先遍历,并输出遍历结果。
注意,上述代码中的dfs()函数和getSingleDegree()函数分别实现了深度优先遍历和计算单度顶点数的功能,你可以根据自己的需要进行修改和扩展。
阅读全文