数据结构图的问题

tondayong1981 软件工程师  2004-05-08 02:41:23
#include"stdio.h"
#define n 4
#define e 6
typedef struct node
{int adjvex;
struct node *next;
}edgenode;
typedef struct
{int vertex;
edgenode *link;
}vexnode;
typedef struct qnode
{int data;
struct qnode *next;
}linkqlist;

typedef struct
{linkqlist *front,*rear;
}linkqueue;

linkqueue *q;

vexnode ga[n];
int visited[n];


creatadjlist(vexnode *ga)
{int i,j,k;
edgenode *s;
for(i=0;i<n;i++)
{scanf("%d",&ga[i].vertex);
ga[i].link=NULL;
}
for(k=0;k<e;k++)
{scanf("%d%d",&i,&j);
s=(edgenode *)malloc(sizeof(edgenode));
s->adjvex=j;
s->next=ga[i].link;
ga[i].link=s;
s=(edgenode *)malloc(sizeof(edgenode));
s->adjvex=i;
s->next=ga[j].link;
ga[j].link=s;
}
}


DFSL(int i)
{int j;
edgenode *p;
printf("%5d",ga[i].vertex);
visited[i]=1;
p=ga[i].link;
while(p!=NULL)
{if(!visited[p->adjvex])
DFSL(p->adjvex);
p=p->next;
}
}


initlinkqueue(linkqueue *q)
{q->front=(linkqlist *)malloc(sizeof(linkqlist));
q->front->next=NULL;
q->rear=q->front;
}

int EMPTY(linkqueue *q)
{if(q->front==q->rear)
return 1;
else return 0;
}

ENQUEUE(linkqueue *q,int x)
{q->rear->next=(linkqlist *)malloc(sizeof(linkqlist));
q->rear=q->rear->next;
q->rear->data=x;
q->rear->next=NULL;
}
DEQUEUE(linkqueue *q)
{linkqlist *p;
int v;
if(q->front==q->rear)
{printf("queue is empty");v=0;}
else{p=q->front->next;
q->front->next=p->next;
if(p->next==NULL)
q->rear=q->front;
v=p->data;
free(p);}
return v;
}

BFSL(int k)
{int i;
edgenode *p;
linkqueue queue;
q=&queue;
initlinkqueue(q);
printf("%5d",ga[k].vertex);
visited[k]=1;
ENQUEUE(q,k);
while(!EMPTY(q))
{ i=DEQUEUE(q);
p=ga[i].link;
while(p!=NULL)
{if(!visited[p->adjvex])
{visited[p->adjvex]=1;
printf("%5d",ga[p->adjvex].vertex);

ENQUEUE(q,p->adjvex);
}
p=p->next;}
}
}

main()
{int i,j,v,u;
edgenode *p;
creatadjlist(ga);
for(i=0;i<n;i++)
{printf("<%d> %d",i,ga[i].vertex);
p=ga[i].link;
while(p!=NULL)
{printf("->%d",p->adjvex);
p=p->next;
}
printf("->NULL");
printf("\n");
}
printf("1.DFSL:\n");
printf("2.BFSL\n");
printf("3.exit:\n");
scanf("%d",&j);
while(j!=3)
{switch(j)
{case 1:printf("please input start point:\n");scanf("%d",&v);DFSL(v);
printf("\n");break;
case 2:printf("please input another start point:\n");scanf("%d",&u);BFSL(u);
printf("\n");break;}
scanf("%d",&j);
}
}

第一次的DFSL结果正确,BFSL的结果不对,而且程序继续下去也不对。帮改一下。
...全文
92 6 点赞 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
tondayong1981 2004-06-30
大家帮帮忙啊???????怎么我的帖子每人回啊??????????
  • 打赏
  • 举报
回复
tondayong1981 2004-06-14
我的原程序哪儿错了?????????
  • 打赏
  • 举报
回复
xiaohai84 2004-06-09
void DFS(ALGraph G,int v) {
ArcNode *p;
visited[v]=1;
pf("%c",G.vertices[v].data);
for(p=G.vertices[v].firstarc;p!=NULL;p=p->nextarc)
if(!visited[p->adjvex]) DFS(G,p->adjvex);
}

void DFStravels(ALGraph G) { //深度优先遍历
for(int i=0;i<G.vexnum;i++) visited[i]=0;
for(i=0;i<G.vexnum;i++)
if(!visited[i]) DFS(G,i);
}

void BFStravels(ALGraph G) { //广度优先遍历
SqQueue Q;
ArcNode *p;
int u,w;
for(int v=0;v<G.vexnum;v++) visited[v]=0;
InitQueue(Q);//置空的辅助队列Q
for(v=0;v<G.vexnum;v++)
if(!visited[v]) {
visited[v]=1;
pf("%c",G.vertices[v].data);
EnQueue(Q,v);
while(Q.front!=Q.rear) {
DeQueue(Q,u);
for(p=G.vertices[u].firstarc;p!=NULL;p=p->nextarc) {
w=p->adjvex;
if(!visited[w]) {
visited[w]=1;
pf("%c",G.vertices[w].data);
EnQueue(Q,w);
}//if
}//for
}//while
}//if
}//
  • 打赏
  • 举报
回复
bestme 2004-05-12
关注
  • 打赏
  • 举报
回复
tondayong1981 2004-05-11
各位高手,帮帮我,谢谢。
  • 打赏
  • 举报
回复
klbt 2004-05-09
关注,帮你up
  • 打赏
  • 举报
回复
相关推荐
发帖
其他
加入

230

社区成员

其他产品/厂家
申请成为版主
帖子事件
创建了帖子
2004-05-08 02:41
社区公告
暂无公告