扬吉诃德 2016-12-13 06:47 采纳率: 0%
浏览 922

C语言数据结构邻接表建立时的问题

请问为什么我建立邻接表的时候老是失败呢?
#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;

}

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2016-12-17 04:38
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示