改正这段代码的错误 LGraph BuildGraph(){ LGraph Graph; Edge E; Vertex V; int Nv,i; printf("输入顶点个数:"); scanf("%d",&Nv); Graph=CreateGraph(Nv); printf("输入边数"); scanf("%d",&(Graph->Ne)); if(Graph->Ne!=0){ E=(Edge)malloc(sizeof(struct ENode)); printf("输入边,格式为:起点小标 终点下标 权重,()"); for(i=0;i<Graph->Ne;i++){ scanf("%d %d %d",&E->V1;&E->V2;E->Weight); InsertEdge(Graph,E); } } printf("输入顶点名称"); for(V=0;V=Graph->Nv;V++){ scanf("%c",&(Graph->G[V].Data); } return Graph; } /*05 深度优先遍历操作 函数名:DFS 说明: 入参:(LGraph Graph,Vertex V) 出参: LGraph Graph 测试输入:0 3 1 0 1 1 1 3 1 1 2 1 A B C D */ void DFS(LGraph Graph,Vertex V){ /*以V为出发点对邻接表存储的图Graph进行DFS搜索*/ PtrToAdjVNode W; Visit(Graph,V); Visited[V]=false; for(W=Graph->G[V].FirstEdge;W=W->Next){ if(!Visited[W->AdjV]){ DFS(Graph,W->AdjV); } } }
时间: 2024-03-22 09:43:01 浏览: 60
以下是改正后的代码:
```
LGraph BuildGraph(){
LGraph Graph;
Edge E;
Vertex V;
int Nv,i;
printf("输入顶点个数:");
scanf("%d", &Nv);
Graph = CreateGraph(Nv);
printf("输入边数:");
scanf("%d", &(Graph->Ne));
if(Graph->Ne != 0){
E = (Edge)malloc(sizeof(struct ENode));
printf("输入边,格式为:起点下标 终点下标 权重 (用空格隔开)");
for(i = 0; i < Graph->Ne; i++){
scanf("%d %d %d", &E->V1, &E->V2, &E->Weight);
InsertEdge(Graph,E);
}
}
printf("输入顶点名称:");
getchar(); // 读取上一个 scanf() 函数中留下的换行符
for(V = 0; V < Graph->Nv; V++){
scanf("%c", &(Graph->G[V].Data));
}
return Graph;
}
/* 深度优先遍历操作
* 函数名:DFS
* 说明:入参 (LGraph Graph, Vertex V),出参 LGraph Graph
* 测试输入:0 3 1 0 1 1 1 3 1 1 2 1 A B C D
*/
void DFS(LGraph Graph, Vertex V){
/* 以 V 为出发点对邻接表存储的图 Graph 进行 DFS 搜索 */
PtrToAdjVNode W;
Visit(Graph, V);
Visited[V] = true;
for(W = Graph->G[V].FirstEdge; W; W = W->Next){
if(!Visited[W->AdjV]){
DFS(Graph, W->AdjV);
}
}
}
```
修改的地方:
1. `scanf("%d %d %d",&E->V1;&E->V2;E->Weight);` 这行代码中,应该使用逗号分隔开每个变量,而不是分号。应该改为 `scanf("%d %d %d", &E->V1, &E->V2, &E->Weight);`。
2. `scanf("%c",&(Graph->G[V].Data);` 这行代码中,由于上一次输入时输入了一个整数,此时缓冲区中还有一个换行符,所以需要在读取字符前加一个 `getchar()` 函数读取上一个 `scanf()` 函数中留下的换行符。同时,由于每个顶点的名称只需要一个字符,所以这里直接使用 `%c` 读取即可。
3. 在 `DFS` 函数中,应该将 `Visited[V]` 标记为 true,表示已经访问过了。
阅读全文