#include<stdio.h> #include<stdbool.h> #define MAX_VERTEX_NUM 50 typedef struct{ int vertex[MAX_VERTEX_NUM]; int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int vexnum; }MGraph; void InitMGraph(MGraph*G) { int i,j; for(i=0;i<G->vexnum;i++) { for(j=0;j<G->vexnum;j++) { G->arc[i][j]=0; } } } void DFS(MGraph G,bool *visited,int v) { int w; visited[v]=true; printf("%d ",v); for(w=0;w<G.vexnum ;w++) { if(G.arc[v][w]!=0&&!visited[w]) { DFS(G,visited,w); } } } void DFSTraverse(MGraph G) { int v; bool visited[MAX_VERTEX_NUM]; for(v=0;v<G.vexnum;v++) { visited[v]=false; } for(v=0;v<G.vexnum;v++) { if(!visited[v]) { DFS(G,visited,v); } } } int FirstAdjVex(MGraph G,int v)//查找第一个临界点 { int w; for(w=0;w<G.vexnum;w++) { if(G.arc[v][w]!=0) return w; } return -1; } int NextAdjVex(MGraph G,int v,int w)//查找下一个临界点 { int i; for(i=w+1;i<G.vexnum;i++) { if(G.arc[v][i]!=0) { return i; } } return -1; } int main() { MGraph G; int i,j; scanf("%d",&G.vexnum); for(i=0;i<G.vexnum;i++) { scanf("%d",&G.vertex[i]); } InitMGraph(&G); for(i=0;i<G.vexnum;i++) { scanf("%d",&G.vertex[i]); for(j=0;j<G.vexnum;j++) { scanf("%d",&G.arc[i][j]); } } DFSTraverse(G); printf("\n"); return 0; } 代码应如何修改才能保证输入4 0 1 0 1 1 0 0 0 0 0 0 1 1 0 1 0矩阵,输出结果是0 1 3 2修改后的代码是什么
时间: 2023-12-06 07:42:03 浏览: 91
C标准库函数集
5星 · 资源好评率100%
代码中存在一处错误,第7行应该是 `#define MAX_VERTEX_NUM 100`,因为题目中给出了最大顶点数是50,但是顶点编号从0开始,因此数组大小应该为最大顶点数加1。同时,第20行应该是 `scanf("%d",&G.vertex[i]);`,因为这里是输入顶点编号而不是输入顶点个数。修改后的代码如下:
```
#include<stdio.h>
#include<stdbool.h>
#define MAX_VERTEX_NUM 100
typedef struct{
int vertex[MAX_VERTEX_NUM];
int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vexnum;
}MGraph;
void InitMGraph(MGraph*G) {
int i,j;
for(i=0;i<=G->vexnum;i++) {
for(j=0;j<=G->vexnum;j++) {
G->arc[i][j]=0;
}
}
}
void DFS(MGraph G,bool *visited,int v) {
int w;
visited[v]=true;
printf("%d ",v);
for(w=0;w<G.vexnum ;w++) {
if(G.arc[v][w]!=0&&!visited[w]) {
DFS(G,visited,w);
}
}
}
void DFSTraverse(MGraph G) {
int v;
bool visited[MAX_VERTEX_NUM];
for(v=0;v<=G.vexnum;v++) {
visited[v]=false;
}
for(v=0;v<G.vexnum;v++) {
if(!visited[v]) {
DFS(G,visited,v);
}
}
}
int FirstAdjVex(MGraph G,int v)//查找第一个临界点 {
int w;
for(w=0;w<G.vexnum;w++) {
if(G.arc[v][w]!=0)
return w;
}
return -1;
}
int NextAdjVex(MGraph G,int v,int w)//查找下一个临界点 {
int i;
for(i=w+1;i<G.vexnum;i++) {
if(G.arc[v][i]!=0) {
return i;
}
}
return -1;
}
int main() {
MGraph G;
int i,j;
scanf("%d",&G.vexnum);
for(i=0;i<G.vexnum;i++) {
scanf("%d",&G.vertex[i]);
}
InitMGraph(&G);
for(i=0;i<G.vexnum;i++) {
for(j=0;j<G.vexnum;j++) {
scanf("%d",&G.arc[i][j]);
}
}
DFSTraverse(G);
printf("\n");
return 0;
}
```
阅读全文