weixin_53083385 2021-12-20 23:42 采纳率: 100%
浏览 12
已结题

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

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

打印临界表时打印不全

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

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

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

1条回答 默认 最新

  • weixin_53083385 2021-12-20 23:44
    关注
    
    
    ```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;
    
    

    ```

    评论

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 创建了问题 12月20日