打印邻接表的时候只能打印出来两个

问题遇到的现象和发生背景

打印临界表时打印不全

问题相关代码,请勿粘贴截图

int creat(AdjList *a)
{
    int i,j,n,t,e;
    int sum;//sum和arcnum一样代表图中总的弧数 
    ArcNode *p1,*p2,c;
    printf("请输入城市的的总个数和航线的总个数\n");
    scanf("%d,%d",&t,&e);
    a->arcnum=e; 
    a->vexnum=t;
    sum=e;
    for(int w=1;w<=t;w++)
    {    
        printf("\n请输入的第%d个城市名称:",w);
        scanf("%s",cities[w]);
    }
    for(int x=1;x<=t;x++)
    {
        printf("%d    %s\n",x,cities[x]);
    }
    for(i=0;i<a->vexnum;i++)
        a->vertex[i].firstarc=NULL;//初始化和顶点第一个相邻的弧为空; 
    for(i=0;i<a->vexnum;i++)
    {
         
    printf("***请输入第%d个城市***\n",i+1);
    scanf("%d",&a->vertex[i].data);
     if(sum==0) continue;
    printf("请输入本城市航班的个数\n");
    scanf("%d",&n); 
     
    for(j=0;j<n;j++)
    {
        if(j==0)
        {

          int q;
            p1=p2=( ArcNode*)malloc(sizeof(ArcNode));
            p1->next=p2->next=NULL;
            a->vertex[i].firstarc=p1;
            printf("请输入与第%d个城市出发的航班第%d个到城市 以及票价\n",i+1,j+1);
            scanf("%d,%d",&p1->adjvex,&p1->weigh);

            sum--;                      
        }
        else{
            p2=(ArcNode*)malloc(sizeof(ArcNode));
            p2->next=NULL;
            p1->next=p2;
            printf("请输入第%d个城市出发的航班到第%d个城市 以及票价\n",i+1,j+1);
            scanf("%d,%d",&p2->adjvex,&p2->weigh);    
            sum--;        
        }
        
    }
    printf("**************************\n");
    
        
    }
}
//打印邻接表
void print(AdjList *a)
{
    int i;
    printf("序号\t顶点名称\t\t边表\n");
    for (i = 0; i <a->vexnum ; i++)
    {
        printf("%d\t", i+1);                        //打印序号
        printf("%s\t\t->", cities[i+1]);        //打印顶点
        while (a->vertex[i].firstarc)
        {
            printf("%s(%d)->", cities[a->vertex[i].firstarc->adjvex], a->vertex[i].firstarc->weigh);
            a->vertex[i].firstarc = a->vertex[i].firstarc->next;
        }
        printf("NULL\n");
    }
}
运行结果及报错内容

img

img

我的解答思路和尝试过的方法
我想要达到的结果


```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxVertices 100
#define INF 65535
int visited[MaxVertices];
char cities [1000][1000]; 
int graph[MaxVertices][MaxVertices];
//*邻接表用两部分表示  1顶点节点包含(data firstarc) 2弧节点包含(adjvex, *next weigh) 
typedef enum {DG/*有向图*/,DN/*有向网*/,UDG/*无向图*/,UDN/*无向网*/} GraphKind;
typedef struct LoopQueue
{
    int data[MaxVertices];
    int front;
    int rear;
}Queue, *LQueue;

typedef struct ArcNode{
    char adjvex;//该弧指向顶点的位置 
  struct ArcNode *next;//指向下一条弧的指针 
    int  weigh;//弧的权值 
}ArcNode;


typedef struct vertexNode{ 
    char data;//顶点数据 
     ArcNode * firstarc;//指向该顶点第一条弧的指针 
}vertexNode; 

typedef struct{
    vertexNode vertex[20];
    int vexnum;
    int arcnum;//图的顶点数量和弧的数量 
    //GraphKind kind;//图的种类 
} AdjList;

```