武汉众行户外拓展培训:会C语言和数据结构的能帮我一下吗?
来源:百度文库 编辑:神马品牌网 时间:2024/09/01 16:07:51
程序是输入一些点,然后输出,比较简单,你看一下就会明白,图的存储是用的邻接表存储方法。
edgepoint 是边结点,vertex是顶点。建议你找本数据结构的书看看。
#include<stdio.h>
typedef struct edgepoint{
int num;
struct edgepoint *link;
}ELINK;/*边结点*/
typedef struct VERT{
int vertex;
ELINK *next;
}VLINK;/*顶点*/
void PRINT(VLINK a);
main()
{
VLINK G[10];
ELINK *p,*q,*pp,*qq,*check;
int k,e,vi,vj,n;
printf("input the n and e:\n");
scanf("%d%d",&n,&e);
for(k=0;k<n;k++)
{
G[k].vertex=k;
G[k].next=NULL;
}
for(k=0;k<e;k++)
{
printf("input the vi and vj:\n");
scanf("%d%d",&vi,&vj);
printf("vi=%d,vj=%d\n",vi,vj);
p=(ELINK *)malloc(sizeof(ELINK));
q=(ELINK *)malloc(sizeof(ELINK));
p->num=vi-1;
q->num=vj-1;
printf("p->num=%d,q->num=%d\n",p->num,q->num);
p->link=NULL;
q->link=NULL;
if(G[vi-1].next==NULL)
{
G[vi-1].next=q;
printf("G[%d].vertex=%d---->G[%d].next->num=%d \n",vi-1,G[vi-1].vertex,vi-1,q->num);
}
else
{
pp=G[vi-1].next;
while((pp->link)!=NULL)
pp=pp->link;
pp->link=q;
printf("q->num=%d\n",q->num);
}
if(G[vj-1].next==NULL)
{
G[vj-1].next=p;
printf("p->num=%d\nG[%d].vertex=%d-------->G[%d].next->num=%d \n",p->num,vj-1,G[vj-1].vertex,vj-1,p->num);
}
else
{
qq=G[vj-1].next;
while((qq->link)!=NULL)
qq=qq->link;
qq->link=p;
printf("p->num=%d\n",p->num);
}
}
for(k=0;k<n;k++)
PRINT(G[k]);
getch();
}
void PRINT(VLINK a)
{
ELINK *p;
printf("%d->",a.vertex);
p=a.next;
while((p->link)!=NULL)
{
printf("%d->",p->num);
p=p->link;
}
printf("%d",p->num);
printf("\n");
}
谢谢你哦,但你的程序好像不太对吧,我在wintc里运行了一下怎末不行啊,总是出现List index out of bounds (0),这是怎末回事啊