让这段代码正常运行void CreatGraph(MGraph *G, DataType a[ ], int n, int e) { int i, j, k; G->vertexNum = n; G->edgeNum = e; for (i = 0; i < G->vertexNum; i++) /*存储顶点信息*/ G->vertex[i] = a[i]; for (i = 0; i < G->vertexNum; i++) /*初始化邻接矩阵*/ for (j = 0; j < G->vertexNum; j++) G->edge[i][j] = 0; for (k = 0; k < G->edgeNum; k++) /*依次输入每一条边*/ { scanf("%d%d", &i, &j); /*输入边依附的顶点编号*/ G->edge[i][j] = 1; G->edge[j][i] = 1; /*置有边标志*/ } } void DFraverse(MGraph *G, int v) /*全局数组变量visited[n]已初始化为0*/ { printf("%c ", G->vertex[v]); visited[v] = 1; for (int j = 0; j < G->vertexNum; j++) if (G->edge[v][j] == 1 && visited[j] == 0) DFSTraverse(G, j); }
时间: 2024-01-24 11:02:05 浏览: 93
图基础代码1
这段代码存在两个问题:
1. 在函数DFraverse()中,调用了未定义的函数DFSTraverse(),应该改为调用DFraverse()。
2. 函数DFraverse()中使用了全局数组visited[],但是该数组未在代码中定义,需要先定义一个全局数组visited[],并初始化为0。
修改后的代码如下:
```
#define MAX_VERTEX_NUM 100
typedef char DataType;
typedef struct {
DataType vertex[MAX_VERTEX_NUM]; // 顶点信息
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertexNum, edgeNum; // 顶点数和边数
} MGraph;
int visited[MAX_VERTEX_NUM]; // 全局数组visited[],初始化为0
void CreatGraph(MGraph *G, DataType a[], int n, int e) {
int i, j, k;
G->vertexNum = n;
G->edgeNum = e;
for (i = 0; i < G->vertexNum; i++) // 存储顶点信息
G->vertex[i] = a[i];
for (i = 0; i < G->vertexNum; i++) // 初始化邻接矩阵
for (j = 0; j < G->vertexNum; j++)
G->edge[i][j] = 0;
for (k = 0; k < G->edgeNum; k++) // 依次输入每一条边
{
scanf("%d%d", &i, &j); // 输入边依附的顶点编号
G->edge[i][j] = 1;
G->edge[j][i] = 1; // 置有边标志
}
}
void DFraverse(MGraph *G, int v) {
printf("%c ", G->vertex[v]);
visited[v] = 1;
for (int j = 0; j < G->vertexNum; j++)
if (G->edge[v][j] == 1 && visited[j] == 0)
DFraverse(G, j); // 递归调用DFraverse(),不是DFSTraverse()
}
```
阅读全文