优化这段代码#include <iostream>#include <cstring>using namespace std;const int MVNum = 100;typedef int VertexType;struct ArcNode { int adjvex; struct ArcNode* nextarc;};struct VNode { VertexType data; ArcNode* firstarc;};typedef VNode AdjList[MVNum];struct ALGraph { AdjList vertices; int vexnum, arcnum;};void InputVertex(ALGraph& G) { for (int i = 0; i < G.vexnum; ++i) { cout << "请输入顶点信息:\n"; cin >> G.vertices[i].data; G.vertices[i].firstarc = nullptr; }}void InputEdge(ALGraph& G) { for (int k = 0; k < G.arcnum; ++k) { int i, j; ArcNode* p1, * p2; cout << "请输入每条边对应的两个顶点的序号:\n"; cin >> i >> j; p1 = new ArcNode; p1->adjvex = j; p1->nextarc = G.vertices[i].firstarc; G.vertices[i].firstarc = p1; p2 = new ArcNode; p2->adjvex = i; p2->nextarc = G.vertices[j].firstarc; G.vertices[j].firstarc = p2; }}void CreateUDG(ALGraph& G) { cout << "请输入顶点数和边数:\n"; cin >> G.vexnum >> G.arcnum; InputVertex(G); InputEdge(G);}bool visited[MVNum];void DFS(ALGraph G, int v) { cout << v; visited[v] = true; ArcNode* p = G.vertices[v].firstarc; while (p != nullptr) { int w = p->adjvex; if (!visited[w]) { DFS(G, w); } p = p->nextarc; }}int main() { memset(visited, false, sizeof(visited)); ALGraph G; CreateUDG(G); DFS(G, 0); return 0;}
时间: 2024-01-19 14:03:02 浏览: 80
使用include <iostream>时一定要加using namespace std
这段代码存在一些可以优化的地方,以下是我提出的优化方案:
1. 对于结构体和变量的命名要有意义,让代码更易读。
2. 在输入边的时候,可以将两个顶点的序号存在一起,避免重复输入。
3. 在输入边的时候,可以通过指针的指向来减少代码量。
4. 在 DFS 函数中,可以将参数 G 改为引用传递,避免出现不必要的拷贝。
5. 在 DFS 函数中,可以将参数 v 改为 const 引用,避免对参数进行修改。
6. 在 DFS 函数中,可以使用范围 for 循环代替指针的遍历,代码更加简洁。
优化后的代码如下:
```
#include <iostream>
#include <cstring>
using namespace std;
const int MAX_VERTEX_NUM = 100;
typedef int VertexType;
struct ArcNode {
int adjvex;
ArcNode* next;
};
struct VNode {
VertexType data;
ArcNode* firstarc;
};
typedef VNode AdjList[MAX_VERTEX_NUM];
struct ALGraph {
AdjList vertices;
int vexnum, arcnum;
};
void InputVertex(ALGraph& G) {
for (int i = 0; i < G.vexnum; ++i) {
cout << "请输入第 " << i << " 个顶点的信息:";
cin >> G.vertices[i].data;
G.vertices[i].firstarc = nullptr;
}
}
void InputEdge(ALGraph& G) {
for (int k = 0; k < G.arcnum; ++k) {
int i, j;
cout << "请输入第 " << k << " 条边对应的两个顶点的序号:";
cin >> i >> j;
ArcNode* p1 = new ArcNode;
p1->adjvex = j;
p1->next = G.vertices[i].firstarc;
G.vertices[i].firstarc = p1;
ArcNode* p2 = new ArcNode;
p2->adjvex = i;
p2->next = G.vertices[j].firstarc;
G.vertices[j].firstarc = p2;
}
}
void CreateUDG(ALGraph& G) {
cout << "请输入顶点数和边数:";
cin >> G.vexnum >> G.arcnum;
InputVertex(G);
InputEdge(G);
}
bool visited[MAX_VERTEX_NUM];
void DFS(const ALGraph& G, const int& v) {
cout << v;
visited[v] = true;
for (auto p = G.vertices[v].firstarc; p != nullptr; p = p->next) {
int w = p->adjvex;
if (!visited[w]) {
DFS(G, w);
}
}
}
int main() {
memset(visited, false, sizeof(visited));
ALGraph G;
CreateUDG(G);
DFS(G, 0);
return 0;
}
```
阅读全文