多语言展示
当前在线:1893今日阅读:176今日分享:34

邻接表怎么输出

邻接表的创建与输出
方法/步骤
1

邻接表是图的常用储存结构之一,它很好的解决了邻接矩阵占用空间较大的问题。邻接表用到了两个结构体,一个是顶点表,包括点的序号和连接此起点的第一条边。一个是边表,包括连接此边的终点和对应之前起点的下一条边。

2

初始化邻接表时,先将定点表赋值,并把指针指向NULL。再将输入的数据插入,插入到起点所对应的边表的最后一个。最后是每个点对应一个链表,头结点为起点,之后的结点为这个起点所连接的边。

3

通俗点说就是把每个点所连接的点组合。

4

#include#include #define max 10000int edge[1000000][2]={0};typedef struct _enode  //边表 { //int dis;  int vex; struct _enode* nextedge;}enode; typedef struct _vnode  //点表 { int vex; enode* firstedge;}vnode; typedef struct _pic   { int vex_num; int edge_num; vnode node[max];}pic;  void find_insert(enode* edge,enode* temp)   //插入边 { enode* p; p=edge; while(p->nextedge!=NULL)  p=p->nextedge; p->nextedge=temp;} pic* create_pic()    //创建表 { int i=0,c1,c2; enode* node_temp; pic* picture; picture=(pic*)malloc(sizeof(pic)); picture->edge_num=5; picture->vex_num=3;  //5条边,3个点   for(i=1;i<=picture->vex_num;i++)    {  picture->node[i].vex=i;  picture->node[i].firstedge=NULL; }   for(i=1;i<=picture->edge_num;i++) {  c1=edge[i][0];  c2=edge[i][1];  node_temp=(enode*)malloc(sizeof(struct _enode));  node_temp->vex=c2;  node_temp->nextedge=NULL;   //开辟空间之后一定要给每一个元素赋值,NULL也要赋值     if(picture->node[c1].firstedge==NULL)  {   picture->node[c1].firstedge=node_temp;  }  else  {   find_insert(picture->node[c1].firstedge,node_temp);  } }    return picture; } int main(void){ int i=0; pic* picture; for(i=1;i<=5;i++)   //输入五条边  {  scanf('%d',&edge[i][0]);  scanf('%d',&edge[i][1]); } picture=create_pic();  for(i=1;i<=picture->vex_num;i++)   //输出  {  enode* p;  p=(enode*)malloc(sizeof(enode));  if(picture->node[i].firstedge==NULL)   printf('error');  else  {   p=picture->node[i].firstedge;   printf('%d ',picture->node[i].vex);   while(p!=NULL)   {    printf('%d ',p->vex);    p=p->nextedge;   }   }  printf('\n'); }  return 0; }

5

输入每条边两个端点的序号,输出每个点所连接的点。下图为运行结果

6

以上 感谢采纳

推荐信息