广度遍历为什么出不来啊
# include<stdio.h>
# include <malloc.h>
# define null 0
#define MAXVEX 100
# define max 100
typedef int Vertex;
struct arcnode
{ int adjvex;
struct arcnode *nextarc;};
struct node{
int data;
struct arcnode *firstarc;};
typedef struct node algraph[MAXVEX+1];
int visited [MAXVEX+1]={0};
void creat (algraph g,int e,int n)
{
struct arcnode *p;
int i,j,k;
printf("请输入顶点信息");
for (i=1;i<=n;i++)
{
scanf ("%d",&g[i].data);
g[i].firstarc=null;
}
for (k=1;k<=e;k++)
{
printf("请输入边的两个顶点");
scanf ("%d%d",&i,&j);
p=(struct arcnode *)malloc(sizeof(struct arcnode));
p->adjvex=j;
p->nextarc=g[i].firstarc;
g[i].firstarc=p;
p=( struct arcnode *)malloc(sizeof(struct arcnode));
p->adjvex=i;
p->nextarc=g[j].firstarc;
g[j].firstarc=p;
}
}
void oupe (algraph g,int n)
{
int i;
struct arcnode *p;
for (i=1;i<=n;i++)
{
p=g[i].firstarc;
printf("%d->",g[i].data);
while (p!=null)
{
printf("%2d",p->adjvex);
p=p->nextarc;
}
printf("\n");
}
}
void dfs(algraph g,int i)
{
struct arcnode *p;
printf("%3d",g[i].data);
visited[i]=1;
p=g[i].firstarc;
while (p!=null)
{
if (visited[p->adjvex]==0)
dfs(g,p->adjvex);
p=p->nextarc;
}
}
void bfs(algraph g,int vi)
{
int i,v,n;
int Q[max],front=0,rear=0;//循环队列
struct arcnode *p;
for(i=0;i<n;i++)
visited[i]=0; //队列赋初值
visited[vi]=1; //访问初始顶点
printf("%d",g[p->adjvex].data);
rear=(rear+1)% max;
Q[rear]=vi;//初始顶点入队列
while(front!=rear) //队列不为空的时候循环
{
front=(front+1)%max;
v=Q[front]; //出队列
p=g[i].firstarc;//查找v的第一个邻接点
while(p!=NULL)//查找v的所有邻接点
{
if(visited[p->adjvex]==0)//未访问过则访问之
{
visited[p->adjvex]=1;
printf("%d--",g[p->adjvex].data);//访问该点并入队
rear=(rear+1)%max;
Q[rear]=p->adjvex;
}
p=p->nextarc; //查找v的下一邻接点
}
}
}
int main()
{
algraph g;
int e,n,i;
printf("请输入顶点个数和边的个数");
scanf("%d%d",&n,&e);
creat(g,e,n);
oupe(g,n);
printf("输入从第几个顶点开始深度优先遍:");
scanf("%d",&i);
dfs(g,i);
printf("\n广度遍历为:");
bfs(g,0);
}