#include <iostream> #include <queue> using namespace std; // 定义图的最大顶点数 #define MAX_VERTEX_NUM 100 // 图的邻接矩阵表示 typedef struct { int vertex[MAX_VERTEX_NUM]; // 顶点数组 int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵 int vertexNum; // 顶点数量 int edgeNum; // 边数量 } GraphMatrix; // 初始化图 void initGraph(GraphMatrix& graph) { graph.vertexNum = 0; graph.edgeNum = 0; for (int i = 0; i < MAX_VERTEX_NUM; i++) { graph.vertex[i] = 0; for (int j = 0; j < MAX_VERTEX_NUM; j++) { graph.edges[i][j] = 0; } } } // 添加顶点 void addVertex(GraphMatrix& graph, int v) { if (graph.vertexNum < MAX_VERTEX_NUM) { graph.vertex[graph.vertexNum] = v; graph.vertexNum++; } } // 添加边 void addEdge(GraphMatrix& graph, int v1, int v2) { int i, j; for (i = 0; i < graph.vertexNum; i++) { if (graph.vertex[i] == v1) break; } for (j = 0; j < graph.vertexNum; j++) { if (graph.vertex[j] == v2) break; } if (i < graph.vertexNum && j < graph.vertexNum) { graph.edges[i][j] = 1; graph.edges[j][i] = 1; graph.edgeNum++; } } // 销毁图 void destroyGraph(GraphMatrix& graph) { graph.vertexNum = 0; graph.edgeNum = 0; } // 深度优先遍历 void depthFirstSearch(GraphMatrix& graph, int v, bool visited[]) { visited[v] = true; cout << graph.vertex[v] << " "; for (int i = 0; i < graph.vertexNum; i++) { if (graph.edges[v][i] == 1 && !visited[i]) { depthFirstSearch(graph, i, visited); } } } // 深度优先遍历图 void DFS(GraphMatrix& graph) { bool visited[MAX_VERTEX_NUM]; for (int i = 0; i < graph.vertexNum; i++) { visited[i] = false; } for (int i = 0; i < graph.vertexNum; i++) { if (!visited[i]) { depthFirstSearch(graph, i, visited); } } cout << endl; } // 广度优先遍历图 void BFS(GraphMatrix& graph) { bool vis这段代码的不足
时间: 2024-02-15 11:24:58 浏览: 82
使用include <iostream>时一定要加using namespace std
这段代码的不足可能有以下几点:
1. 缺少输入检查:在添加顶点和添加边的函数中,没有检查输入的参数是否合法,比如顶点数量是否已经达到最大值,或者添加的边是否已经存在。
2. 图的存储方式不够灵活:这里使用邻接矩阵来表示图,虽然在一些场景下比较方便,但是对于稀疏图来说,会浪费大量的空间。因此,可以考虑使用邻接表等其他存储方式。
3. 没有考虑多个连通分量的情况:在深度优先遍历和广度优先遍历的函数中,只考虑了单个连通分量的情况。如果图由多个连通分量组成,就只能遍历其中一个连通分量。
4. 代码可读性不够好:代码中缺少注释,函数命名不够规范,导致代码可读性不够好,不利于后期维护和修改。
阅读全文