鱼C论坛

 找回密码
 立即注册
查看: 4365|回复: 6

BFSTraverse谁帮我看我的代码问题在哪

[复制链接]
发表于 2015-8-4 23:29:27 | 显示全部楼层 |阅读模式
4鱼币
       谁帮我看一下我这个代码问题在哪?
简单说明一下这就是图的广度优先遍历
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
#define INFINITY 65535
typedef struct
{
    char vexs[MAX];
    int arc[MAX][MAX];
    int numVertexes,numEdges;
}MGraph;
typedef struct QNode
{
    int data;
    struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
    QueuePtr front,rear;
}LinkQueuePtr;
int visited[MAX];
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[i]);
        getchar();
        printf("输入节点之间的连接顺序以及权重");
        for(i=0;i<G->numEdges;i++)
            for(j=0;j<G->numEdges;j++)
            G->arc[i][j]=INFINITY;
    for(k=0;k<G->numEdges;k++)
    {
        scanf("%d%d%d",&i,&j,&temp);
        G->arc[i][j]=temp;
        G->arc[j][i]=temp;
    }

}
void BFSTraverse(MGraph G)
{
    int i,j,k;
    LinkQueuePtr Q;
    for(i=0;i<G.numVertexes;i++)
        visited[i]=0;
        for(k=0;k<G.numVertexes;k++)
        {
            if(!visited[k])
            {
            visited[k]=1;
            printf("%c ",G.vexs[k]);
            EnQueue(&Q,k);
            printf("A\n");
            while(Q.front!=Q.rear)
            {
                DeQueue(&Q,&i);
                for(j=0;j<G.numVertexes;j++)
                {
                    if(!visited[j]&&G.arc[i][j]<INFINITY)
                    {
                        visited[j]=1;
                        printf("%c ",G.vexs[j]);
                        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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-4 23:29:28 | 显示全部楼层
void InitQueue(LinkQueuePtr *q)
{
     q->front=q->rear=(QueuePtr)malloc(sizeof(QNode));
     q->front=q->rear=NULL;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-10 12:30:47 | 显示全部楼层
那摩屌
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-10 12:31:26 | 显示全部楼层
那摩屌
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-16 21:38:09 | 显示全部楼层
不知道这么久了 你找到问题了没有,调试半个小时,发现你初始化队列的最后一句把 队列的两个前后指针赋值了一个null 那么值钱申请的空间不就 白申请了吗 正确的是 后面加上NEXT 赋值为null 而不是两个前后指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-9-16 22:07:19 | 显示全部楼层
可是,我的测试还是不对。你把你的代码,贴出来,我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 20:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表