优化这段代码#define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:4996) #include<stdio.h> #include<stdlib.h> #define MAX_VERTEX_NUM 20// 邻接矩阵无向图结构体 #define inf 32768 typedef char VertexData; typedef struct { char vertex[MAX_VERTEX_NUM]; // 顶点表 int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵 int vexnum, arcnum; // 顶点数 } AdjMatrix;// 初始化无向图 int LocateVertes(AdjMatrix* G, char v) //顶点位置 { int j = 0, k; for (k = 0; k < G->vexnum; k++) if (G->vertex[k] == v) { j = k; break; } return j; } void CreateUDG(AdjMatrix* G) //无向图 { int i; int j; int k; char v1, v2; scanf("%d,%d", &G->vexnum, &G->arcnum); getchar(); for (i = 0; i < G->vexnum; i++) for (j = 0; j < G->vexnum; j++) G->arcs[i][j] = 0; for (i = 0; i < G->vexnum; i++) scanf("%c", &G->vertex[i]); getchar(); for (k = 0; k < G->arcnum; k++) { scanf("%c,%c", &v1, &v2); getchar(); i = LocateVertes(G, v1); i = LocateVertes(G, v2); G->arcs[i][j] = 1; } for (i = 0; i < G->vexnum; i++) { for (j = 0; j < G->vexnum; j++) printf("%d", G->arcs[i][j]); printf("\n"); } } int main() { AdjMatrix G; CreateUDG(&G); return 0; }
时间: 2024-01-03 10:03:59 浏览: 82
C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别
5星 · 资源好评率100%
1. 代码格式化
代码格式化可以使代码更加清晰易读,建议使用代码编辑器自带的格式化工具或使用在线格式化工具进行格式化。
2. 函数分离
可以将 `LocateVertes` 函数和 `CreateUDG` 函数分离到不同的文件中,使代码结构更加清晰。
3. 输入处理
在输入顶点和边时,建议使用循环读入输入,而不是使用 `getchar()`,这样可以避免输入错误导致程序出错。
4. 变量名修改
变量名需要更改,使其符合编程规范。例如,`v1` 和 `v2` 可以改为 `vertex1` 和 `vertex2`。
5. 注释添加
在关键部分添加注释,可以使代码更加易读,方便其他开发人员阅读和修改代码。
修改后的代码如下:
```c
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
#define MAX_VERTEX_NUM 20
#define INF 32768
typedef char VertexData;
typedef struct {
char vertex[MAX_VERTEX_NUM]; // 顶点表
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vexnum, arcnum; // 顶点数
} AdjMatrix;
// 顶点位置
int locateVertex(AdjMatrix* G, char v) {
int i;
for (i = 0; i < G->vexnum; i++) {
if (G->vertex[i] == v) {
return i;
}
}
return -1;
}
// 初始化无向图
void createUDG(AdjMatrix* G) {
int i;
int j;
int k;
char vertex1, vertex2;
scanf("%d,%d", &G->vexnum, &G->arcnum);
// 读取顶点
for (i = 0; i < G->vexnum; i++) {
scanf(" %c", &G->vertex[i]);
}
// 初始化邻接矩阵
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = INF;
}
}
// 读取边
for (k = 0; k < G->arcnum; k++) {
scanf(" %c,%c", &vertex1, &vertex2);
i = locateVertex(G, vertex1);
j = locateVertex(G, vertex2);
G->arcs[i][j] = 1;
G->arcs[j][i] = 1; // 无向图,需要将两个方向都设置为1
}
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
printf("%d", G->arcs[i][j]);
}
printf("\n");
}
}
int main() {
AdjMatrix G;
createUDG(&G);
return 0;
}
```
阅读全文