#include <stdio.h> #include <stdlib.h> #define maxsize 10 int visited[maxsize]={0}; typedef char datatype; typedef struct { datatype vertex[maxsize]; int edge[maxsize][maxsize]; int vertexnum,edgenum; }mgraph; 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; int j=0; for(j=0;j<G->vertexnum;j++) { if(G->edge[v][j]==1&&visited[j]==0) dfraverse(G,j); } } void bftraverse(mgraph *G,int v) { int i,j,Q[maxsize]; int front=-1; int rear=-1; printf("%c",G->vertex[v]); visited[v]=1; Q[++rear]=v; while(front!=rear) { i=Q[++front]; for(j=0;j<G->vertexnum;j++) { if(G->edge[i][j]==1&&visited[j]==0) { printf("%c",G->vertex[j]); visited[j]=1; Q[++rear]=j; } } } } int main () { int i; char ch[]={'A','B','C','D','E'}; mgraph MG; creatgraph(&MG,ch,5,6); for(i=0;i<maxsize;i++) visited[i]=0; dfraverse(&MG,0); for(i=0;i<maxsize;i++) visited[i]=0; bftraverse(&MG,0); return 0; }
时间: 2024-01-24 17:02:46 浏览: 80
这段代码的问题不大,可能是由于代码格式问题导致看起来不太清晰。如果需要改进,可以尝试对代码进行一些注释,以便更好地理解代码的功能和实现方式。以下是一些注释的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define maxsize 10
int visited[maxsize]={0}; //定义一个全局数组,表示节点是否被访问过
typedef char datatype;
typedef struct {
datatype vertex[maxsize]; //存储节点名称的数组
int edge[maxsize][maxsize]; //邻接矩阵
int vertexnum,edgenum; //节点数目和边数目
}mgraph;
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++)
{
int i,j;
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; //标记该节点已被访问
int j=0;
for(j=0;j<G->vertexnum;j++)
{
if(G->edge[v][j]==1&&visited[j]==0)
dfraverse(G,j); //递归遍历与当前节点相邻的未被访问的节点
}
}
void bftraverse(mgraph *G,int v) {
int i,j,Q[maxsize];
int front=-1;
int rear=-1;
printf("%c",G->vertex[v]); //输出当前遍历的节点名称
visited[v]=1; //标记该节点已被访问
Q[++rear]=v;
while(front!=rear)
{
i=Q[++front];
for(j=0;j<G->vertexnum;j++)
{
if(G->edge[i][j]==1&&visited[j]==0)
{
printf("%c",G->vertex[j]); //输出当前遍历的节点名称
visited[j]=1; //标记该节点已被访问
Q[++rear]=j;
}
}
}
}
int main () {
int i;
char ch[]={'A','B','C','D','E'};
mgraph MG;
creatgraph(&MG,ch,5,6); //创建图
for(i=0;i<maxsize;i++)
visited[i]=0; //初始化visited数组
dfraverse(&MG,0); //深度优先遍历
for(i=0;i<maxsize;i++)
visited[i]=0; //初始化visited数组
bftraverse(&MG,0); //广度优先遍历
return 0;
}
```
阅读全文