easy_life 发表于 2015-8-4 23:29:27

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;
}

y290176346 发表于 2015-8-4 23:29:28

void InitQueue(LinkQueuePtr *q)
{
   q->front=q->rear=(QueuePtr)malloc(sizeof(QNode));
   q->front=q->rear=NULL;

weisuo 发表于 2015-8-10 12:30:47

那摩屌

weisuo 发表于 2015-8-10 12:31:26

那摩屌

y290176346 发表于 2015-9-16 21:38:09

不知道这么久了 你找到问题了没有,调试半个小时,发现你初始化队列的最后一句把 队列的两个前后指针赋值了一个null 那么值钱申请的空间不就 白申请了吗 正确的是 后面加上NEXT 赋值为null 而不是两个前后指针

y290176346 发表于 2015-9-16 21:39:29

正确的是
void InitQueue(LinkQueuePtr *q)
{
   q->front=q->rear=(QueuePtr)malloc(sizeof(QNode));
   q->front->next=q->rear->next=NULL;

easy_life 发表于 2015-9-16 22:07:19

可是,我的测试还是不对。你把你的代码,贴出来,我看看
页: [1]
查看完整版本: BFSTraverse谁帮我看我的代码问题在哪