邻接表创建成功了,但是不出遍历结果
#include<stdio.h>
#include<stdlib.h>
struct jian
{
int dian;
struct jian* qa;
int in;
}s[4];
struct biao
{
int p;
struct jian* bia;
}we[4];
struct tu
{
struct biao m[4];
int n,e;
};
int main()
{int creat(struct tu* q,int n);
void shendigui(struct tu* q,int v);
int i,j,a,n;
struct biao m[4];
printf("请输入图的顶点数目(权值不为0):");
scanf("%d",&a);
printf("请输入顶点的值:");
for(i=0;i<a;i++)
{scanf("%d",&s[i].dian);
}
n=creat(m,a);
printf("请输入相应的序号:");
for(i=0;i<a;i++)
{scanf("%d",&m[i].p);
}
printf("边数为:%d\n",n);
printf("请输入你要从第几个顶点开始:");
scanf("%d",&i);
shendigui(m,i);
return 0;
}
int creat(struct tu *q,int n)
{int k,i,j,l;
int y[4][4];
struct jian* a;
q=(struct tu *)malloc(sizeof(struct tu));
q->n=n;
q->e=0;
for(i=0;i<n;i++)
q->m[i].bia=NULL;
printf("请输入两顶点之间的关系,若有关系则输入1,如果没有关系则输入0");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{scanf("%d",&k);
y[i][j]=k;}
for(i=0;i<n;i++)
for(j=n-1;j>=0;j--)
if(y[i][j]!=0){
if(i<j)
l++;
a=(struct jian*)malloc(sizeof(struct jian));
a->dian=j;
a->qa=q->m[i].bia;
q->m[i].bia=a;
q->e++;
}
return l;}
int vis[4]={6};
void shendigui(struct tu *q,int v)
{
int i,j,c,w,n=0;
int rear=0,front=0;
struct biao* k;
int ss[4];
k=(struct biao*)malloc(sizeof(struct biao));
vis[v]=1;
k=q->m[v].bia;
rear=(rear+1)%4;
ss[rear]=v;
printf("%d",v);
printf("->");
while(rear!=front)
{front=(front+1)%4;
w=ss[front];
k=q->m[i].bia;
while(k!=NULL)
{if(vis[k->p]==0)
{
printf("%2d->",k->p);
vis[k->p]=1;
rear=(rear+1)%4;
ss[rear]=k->p;
}
k=k->bia;
}}
printf("\n");}
实现图的广度优先遍历,显示结果