BFSTraverse谁帮我看我的代码问题在哪
谁帮我看一下我这个代码问题在哪?简单说明一下这就是图的广度优先遍历
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
#define INFINITY 65535
typedef struct
{
char vexs;
int arc;
int numVertexes,numEdges;
}MGraph;
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front,rear;
}LinkQueuePtr;
int visited;
void InitQueue(LinkQueuePtr *q)
{
q->front=q->rear=(QueuePtr)malloc(sizeof(QNode));
q->front=q->rear=NULL;
}
void EnQueue(LinkQueuePtr *q,int i)
{
QueuePtr e;
e=(QueuePtr)malloc(sizeof(QNode));
e->data=i;
printf("2D\n");
e->next= NULL;
printf("4e1\n");
q->rear->next=e;
printf("4e\n");
q->rear=e;
}
void DeQueue(LinkQueuePtr *q,int *i)
{
QueuePtr e;
e=q->front->next;
(*i)=e->data;
q->front->next=e->next;
if(q->rear==e)
q->rear=q->front;
free(e);
}
void CreateMGraph(MGraph *G)
{
int i,j,k,temp;
printf("输入节点数和边数:\n");
scanf("%d%d",&G->numVertexes,&G->numEdges);
getchar();
printf("输入节点:\n");
for(i=0;i<G->numVertexes;i++)
scanf("%c",&G->vexs);
getchar();
printf("输入节点之间的连接顺序以及权重");
for(i=0;i<G->numEdges;i++)
for(j=0;j<G->numEdges;j++)
G->arc=INFINITY;
for(k=0;k<G->numEdges;k++)
{
scanf("%d%d%d",&i,&j,&temp);
G->arc=temp;
G->arc=temp;
}
}
void BFSTraverse(MGraph G)
{
int i,j,k;
LinkQueuePtr Q;
for(i=0;i<G.numVertexes;i++)
visited=0;
for(k=0;k<G.numVertexes;k++)
{
if(!visited)
{
visited=1;
printf("%c ",G.vexs);
EnQueue(&Q,k);
printf("A\n");
while(Q.front!=Q.rear)
{
DeQueue(&Q,&i);
for(j=0;j<G.numVertexes;j++)
{
if(!visited&&G.arc<INFINITY)
{
visited=1;
printf("%c ",G.vexs);
EnQueue(&Q,k);
}
}
}
}
}
}
int main()
{
MGraph G;
CreateMGraph(&G);
BFSTraverse(G);
return 0;
} void InitQueue(LinkQueuePtr *q)
{
q->front=q->rear=(QueuePtr)malloc(sizeof(QNode));
q->front=q->rear=NULL; 那摩屌 那摩屌 不知道这么久了 你找到问题了没有,调试半个小时,发现你初始化队列的最后一句把 队列的两个前后指针赋值了一个null 那么值钱申请的空间不就 白申请了吗 正确的是 后面加上NEXT 赋值为null 而不是两个前后指针 正确的是
void InitQueue(LinkQueuePtr *q)
{
q->front=q->rear=(QueuePtr)malloc(sizeof(QNode));
q->front->next=q->rear->next=NULL; 可是,我的测试还是不对。你把你的代码,贴出来,我看看
页:
[1]