#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 ",G.vertex[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; } 应如何修改才能让其能够输入4 0 1 0 1 1 0 0 0 0 0 0 1 1 0 1 0 矩阵,输出0 1 3 2
时间: 2023-12-06 18:42:18 浏览: 95
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
可以将输入部分改为:
```
scanf("%d",&G.vexnum);
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]);
}
}
```
这样就可以同时输入顶点和邻接矩阵了。同时,应该将 DFS 函数中的 printf("%d ",G.vertex[v]) 改为 printf("%d ",v),以输出顶点的编号而不是顶点的值。最后,应该将输出结果调整为 0 1 3 2,即输出顶点的编号而不是值。
阅读全文