欢迎来到入门教程网!

C语言

当前位置:主页 > 软件编程 > C语言 >

图的邻接表存储表示示例讲解

来源:本站原创|时间:2020-01-10|栏目:C语言|点击:

复制代码 代码如下:

//---------图的邻接表存储表示-------

#include<stdio.h>
#include<stdlib.h>

#define MAX_VERTEXT_NUM 20

typedef int InfoType;
typedef char VertextType;

typedef struct ArcNode
{
    int adjvex;
    struct ArcNode *nextArc;
    InfoType *info;
}ArcNode;

typedef struct VNode
{
    VertextType data;
    ArcNode *firstArc;
}VNode, AdjList[MAX_VERTEXT_NUM];

typedef struct
{
    AdjList verTices;
    int vexNum;
    int arcNum;
    int kind;
}ALGraph;

void CreateGraph(ALGraph *G);
void DisplayGraph(ALGraph *G);

int main()
{
    ALGraph *Graph = (ALGraph *)malloc(sizeof(ALGraph));
    CreateGraph(Graph);
    DisplayGraph(Graph);

    system("pause");
}

void CreateGraph(ALGraph *G)
{
    int i,j,k;
    ArcNode *arcNode;
    printf_s("请输入顶点数和边数:");
    scanf_s("%d,%d",&G->vexNum, &G->arcNum);

    //建立顶点表
    printf_s("建立顶点表\n");
    for (i = 0; i < G->vexNum; i++)
    {
        printf_s("请输入第%d个顶点:", i);
        fflush(stdin);//刷新缓冲区
        G->verTices[i].data = getchar();
        G->verTices[i].firstArc = NULL;
    }

    //建立边表
    printf_s("建立边表\n");
    for (k = 0; k < G->arcNum; k++)
    {
        printf_s("请输入(vi-vj)的顶点对序号");
        scanf_s("%d,%d", &i, &j);
        arcNode = (ArcNode *)malloc(sizeof(ArcNode));
        arcNode->adjvex = j;
        arcNode->nextArc = G->verTices[i].firstArc;//插入表头
        G->verTices[i].firstArc = arcNode;

        arcNode = (ArcNode *)malloc(sizeof(ArcNode));
        arcNode->adjvex = i;
        arcNode->nextArc = G->verTices[j].firstArc;//插入表头
        G->verTices[j].firstArc = arcNode;
    }
}

void DisplayGraph(ALGraph *G)
{
    int i;
    for (i = 0; i < G->vexNum; i++)
    {
        printf_s("%d->", i);
        while (G->verTices[i].firstArc != NULL)
        {
            printf_s("%d->", G->verTices[i].firstArc->adjvex);
            G->verTices[i].firstArc = G->verTices[i].firstArc->nextArc;
        }
        printf_s("\n");
    }
}



复制代码 代码如下:

请输入顶点数和边数:6,7
建立顶点表
请输入第0个顶点:0
请输入第1个顶点:1
请输入第2个顶点:2
请输入第3个顶点:3
请输入第4个顶点:4
请输入第5个顶点:5
建立边表
请输入(vi-vj)的顶点对序号0,1
请输入(vi-vj)的顶点对序号0,4
请输入(vi-vj)的顶点对序号1,4
请输入(vi-vj)的顶点对序号1,5
请输入(vi-vj)的顶点对序号2,3
请输入(vi-vj)的顶点对序号2,5
请输入(vi-vj)的顶点对序号3,5
0->4->1->
1->5->4->0->
2->5->3->
3->5->2->
4->1->0->
5->3->2->1->
请按任意键继续. . .

上一篇:c语言计算三角形面积代码

栏    目:C语言

下一篇:C++非递归遍历磁盘文件和递归遍历磁盘文件的程序示例

本文标题:图的邻接表存储表示示例讲解

本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3902.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有