#include"stdio.h"
#include"stdlib.h"
#define MAXVER 10
int visited[MAXVER];
int BFSvisited[MAXVER];
typedef char ElemType;
typedef struct node
{int num;
struct node *next;
} slink;
typedef struct
{struct
{ElemType vertex;
slink *first;
}ve[MAXVER];
int vex,edge,tag;
}adjlist;
void cregraph(adjlist *G,int n,int m)
{int i,e=0;slink *p,*q,*s;char x,y;
G->vex=n;G->tag=m;
for(i=0;i<n;i++)
{G->ve[i].vertex=i+'A';G->ve[i].first=NULL;
}
printf("输入边的或弧的两个顶点,空格结束\n");
scanf("%c%c",&x,&y);
while(x!=' '&&y!=' ')
{e++;
s=(slink *)malloc(sizeof(slink));
s->num=y-'A';
if(G->ve[x-'A'].first==NULL)
{G->ve[x-'A'].first=s;
s->next=NULL;
}
else
{p=G->ve[x-'A'].first;
if(p->num>s->num)
{s->next=p;G->ve[x-'A'].first=s;
}
else
{q=p->next;
while(q!=NULL&&s->num>q->num)
{p=q;q=q->next;
}
p->next=s;s->next=q;
}
}
if(!G->tag)
{s=(slink *)malloc(sizeof(slink));
s->num=x-'A';
if(G->ve[y-'A'].first==NULL)
{G->ve[y-'A'].first=s;
s->next=NULL;
}
else
{p=G->ve[y-'A'].first;
if(p->num>s->num)
{s->next=p;
G->ve[y-'A'].first=s;
}
else
{q=p->next;
while(q!=NULL&&s->num>q->num)
{p=q;
q=q->next;
}
p->next=s;s->next=q;
}
}
}
printf("输入边的或弧的两个顶点,空格结束\n");
scanf("%c%c",&x,&y);
}
G->edge=e;
}
void dfs(adjlist *G,int v)//深度优先遍历
{
slink *p;
printf("%3c",G->ve[v].vertex);
visited[v]=1;
p=G->ve[v].first;
while(p)
{if(!visited[p->num])
dfs(G,p->num);
p=p->next;
}
}
void dfsgraph(adjlist *G)
{int i;
for(i=0;i<G->vex;i++)
if(!visited[i])
dfs(G,i);
}
void bfs(adjlist *G,int v)//广度优先遍历
{
int queue[MAXVER],front,rear,i;
slink *p;
front=rear=0;
queue[rear++]=v;
while(front!=rear)
{v=queue[front++];
printf("%c->",G->ve[v].vertex);BFSvisited[v]=1;
p=G->ve[v].first;
while(p!=NULL)
{for(i=0;i<rear;i++)
if(p->num==queue[i])break;
if(i>=rear)
queue[rear++]=p->num;
p=p->next;
}
}
}
void bfsgraph(adjlist *G)
{int i;
for(i=0;i<G->vex;i++)
if(!BFSvisited[i])
bfs(G,i);
}
int main()
{adjlist G;
int n,m;
printf("输入图的顶点数和类型:\n");
scanf("%d%d",&n,&m);
cregraph(&G,n,m);
printf("深度优先遍历的结果为:");
dfs(&G,1);
printf("\n");
printf("广度优先遍历为:");
bfs(&G,1);
printf("\n");
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
111
说明程序里面有逻辑错误,是哪一部分有问题呢?