zoukankan      html  css  js  c++  java
  • 图的邻接表存储表示(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("建立顶点表
    ");
        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("建立边表
    ");
        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("
    ");
        }
    }

     

    请输入顶点数和边数: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->
    请按任意键继续. . .
  • 相关阅读:
    parseInt()的用法
    报文
    express的中间件与next()
    前后端分离与前后端不分离
    jQuery中四个绑定事件的区别 on,bind,live,delegate
    TCP传输的三次握手四次挥手策略
    报文
    HTTP和HTTPS以及两者的区别
    前后端不分离与分离
    express中间件的next()方法
  • 原文地址:https://www.cnblogs.com/zhangtingkuo/p/3441250.html
Copyright © 2011-2022 走看看