Zijeak 2018-12-25 21:31 采纳率: 33.3%
浏览 854

【数据结构】用邻接表存储图的简单问题

#include<stdio.h>
#define MAX_VERTEX_NUM 20//最多顶点个数 
#define ERROR -1

typedef char VertexData;
//边表节点类型定义 
typedef struct ArcNode{
    int adj;//该弧指向顶点的位置 
    struct ArcNode *nextarc;//指向下一条弧的指针 
}ArcNode;
//表头节点类型定义 
typedef struct VertexNode{
    VertexData data;
    ArcNode *firstarc;//指向该顶点第一条弧的指针; 
    int order;
}VertexNode;
typedef struct{
    VertexNode vertex[MAX_VERTEX_NUM];
    int vexnum,arcnum;
}AdjList;

int LocateVertex(AdjList *G,VertexData v)
{
    int j=ERROR,k;
    for(k=0;k<G->vexnum;k++)
    {
     if(G->vertex[k].data==v)
     {
        j=G->vertex[k].order;
        break;
     }
    }
     return(j);
} 

void CreateGraph(AdjList *G)
{
    printf("请输入图的顶点数和弧数(最多不超过20):");
    scanf("%d %d",&G->vexnum,&G->arcnum);
    printf("请输入顶点:");
    int i,j,k;
    char v1,v2;
    for(i=0;i<G->vexnum;i++)
    {
        scanf("%c",&(G->vertex[i].data)); 
        G->vertex[i].order=i+1;
        G->vertex[i].firstarc=NULL;

    }
    printf("请输入一条弧的两个顶点(例如AB):\n");
    for(k=0;k<G->vexnum;k++)
    {
        scanf("%c %c",&v1,&v2);
        ArcNode *p,*q;
        p=(ArcNode*)malloc(sizeof(ArcNode));
        q=(ArcNode*)malloc(sizeof(ArcNode));

        i=LocateVertex(G,v1);
        j=LocateVertex(G,v2); 
        p->adj=j;
        q->adj=i;
        p->nextarc=G->vertex[i].firstarc;
        q->nextarc=G->vertex[j].firstarc;
        G->vertex[i].firstarc=p;
        G->vertex[j].firstarc=q;
        fflush(stdin);
    }


}
void print(AdjList *G)
{
    int i,j;
    for(i=0;i<G->vexnum;i++)
    {
        printf("%c  ",G->vertex[i].data);
        ArcNode *p;
        p=G->vertex[i].firstarc;
        while(p!=NULL)
        {
            printf("%d  ",p->adj);
            p=p->nextarc;
        }
        printf("\n");   

    }
}

void main()
{
    AdjList G;
    CreateGraph(&G);
    print(&G);
}

用邻接表存储图,但是测试(将所建的邻接表打印在屏幕上)时出现以下非正常结果
求大佬指点迷津
图片说明

  • 写回答

1条回答 默认 最新

  • devmiao 2018-12-25 14:01
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services