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