请问为什么我建立邻接表的时候老是失败呢?
#include
#include
#define MaxSize 100;
//队列
typedef struct queue
{
int Front,Rear,MaxQueue;
int Elements[100];
}Queue;
int IsEmpty(Queue q)
{
return q.Front==q.Rear;
}
void CreateQueue(Queue *q,int maxsize)
{
q->Front=q->Rear=0;
q->MaxQueue=maxsize;
}
int IsFull(Queue q)
{
return (q.Rear+1)%q.MaxQueue==q.Front;
}
void Append(Queue *q,int x)
{
if(IsFull(*q))
printf("Overflow");
else
q->Elements[q->Rear=(q->Rear+1)%q->MaxQueue]=x;
}
void Serve(Queue *q)
{
if(IsEmpty(*q))
printf("Underflow");
else
q->Front=(q->Front+1)%q->MaxQueue;
}
void QueueFront(Queue q,int *x)
{
if(IsEmpty(q))
printf("Underflow");
else
*x=q.Elements[(q.Front+1)%q.MaxQueue];
}
//邻接表***************************************************************************
typedef struct enode
{
int AdjVex;
int W;
struct enode * NextArc;
}ENode;
typedef struct graph
{
int Vertices;
ENode** A;
}Graph;
int Add(Graph g, int u, int v, int w);
int Delete(Graph *g, int u, int v);
void DFS(Graph g, int v, int *visited);
void Traversal_DFS(Graph g);
void BFS(Graph g, int v, int *visited);
void Traversal_BFS(Graph g);
//建立邻接表**********************************************************************
void CreateGraph(Graph* g,int Vertices, int edge)
{
int i,u=0,v=0;
g->Vertices=Vertices;
g->A=(ENode**)malloc(Vertices*sizeof(ENode*));
for(i=0;i
{
g->A[i]=NULL;
}
printf("请输入边的信息,格式为 u,v\n");
for(i=0; i
{
scanf("%d%d",&u,&v);
g->A[i]->NextArc=(ENode*)malloc(sizeof(ENode));
while(g->A[u]->NextArc)
{
g->A[u]=g->A[u]->NextArc;
}
g->A[u]->AdjVex=v;
}
return ;
}
//DFS递归算法********************************************************************
void DFS(Graph g, int v, int *visited)
{
ENode *w;
visited[v]=1;
printf("%d ", v);
for ( w=g.A[v]; w; w=w->NextArc)
if (!visited[w->AdjVex] )
DFS(g, w->AdjVex, visited);
}
void Traversal_DFS(Graph g)
{
printf("DFS: ");
int visited[100];
int i, n=g.Vertices;
for(i=0; i<n; i++)
visited[i]=0;
for (i=0; i<n; i++)
if (!visited[i])
DFS(g, i, visited);
printf("\n");
}
//BFS递归算法*********************************************************************
void BFS(Graph g, int v, int *visited)
{
ENode *w;
int u;
Queue q;
CreateQueue(&q,100);
visited[v]=1;
printf("%d ", v);
Append(&q, v);
while (! IsEmpty(q))
{
QueueFront(q, &u); //队头元素出队并置为u
Serve(&q);
for (w=g.A[u]; w; w=w->NextArc)
{
if (!visited[w->AdjVex])
{
printf("%d ", w->AdjVex);
visited[w->AdjVex]=1;
Append(&q, w->AdjVex);
}
}
}
}
void Traversal_BFS(Graph g)
{
printf("BFS: ");
int visited[100];
int i, n=g.Vertices;
for(i=0; i<n; i++)
visited[i]=0;
for (i=0; i<n; i++)
if (!visited[i])
BFS(g, i, visited);
printf("\n");
}
//main****************************************************************************
int main()
{
Graph a=NULL;
a=(Graph)malloc(sizeof(Graph));
int u,v;
int Vertices,edge;
u=v=Vertices=edge=0;
printf("请输入总结点数\n");
scanf("%d",&Vertices);
printf("请输入总边数\n");
scanf("%d",&edge);
CreateGraph(a,Vertices,edge);
Traversal_DFS(a);
Traversal_BFS(a);
return 0;
}