• 数据结构之---C语言实现图的数组(邻接矩阵)存储表示


    //图的数组(邻接矩阵)存储表示
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX_VEX_NUM 50
    typedef char VertexType;
    typedef enum {
        DG, UDG
    } GraphType;
    typedef struct {
        VertexType vexs[MAX_VEX_NUM];
        int arcs[MAX_VEX_NUM][MAX_VEX_NUM];
        int vexnum, arcnum;
        GraphType type;
    } MGraph;
     
    //定位
    int getIndexOfVexs(char vex, MGraph *MG)
    {
        int i;
        for (i = 1; i <= MG->vexnum; i++) 
    	{
            if (MG->vexs[i] == vex) 
    		{
                return i;
            }
        }
        return 0;
    }
     
    //创建图
    void create_MG(MGraph *MG) 
    {
        int i, j, k;
        int v1, v2, type;
        char c1, c2;
        printf("Please input graph type DG(0) or UDG(1) :");
        scanf("%d", &type);
        if (type == 0)
            MG->type = DG;
        else if (type == 1)
            MG->type = UDG;
        else 
    	{
            printf("Please input correct graph type DG(0) or UDG(1)!");
            return;
        }
     
        printf("Please input vexmun : ");
        scanf("%d", &MG->vexnum);
        printf("Please input arcnum : ");
        scanf("%d", &MG->arcnum);
        getchar();
        for (i = 1; i <= MG->vexnum; i++) 
    	{
            printf("Please input %dth vex(char):", i);
            scanf("%c", &MG->vexs[i]);
            getchar();
        }
     
        //初始化邻接矩阵
        for (i = 1; i <= MG->vexnum; i++) 
    	{
            for (j = 1; j <= MG->vexnum; j++)
    	   	{
                MG->arcs[i][j] = 0;
            }
        }
     
        //输入边的信息,建立邻接矩阵
        for (k = 1; k <= MG->arcnum; k++) {
            printf("Please input %dth arc v1(char) v2(char) : ", k);
            scanf("%c %c", &c1, &c2);
            v1 = getIndexOfVexs(c1, MG);
            v2 = getIndexOfVexs(c2, MG);
            if (MG->type == 1)
                MG->arcs[v1][v2] = MG->arcs[v2][v1] = 1;
            else
                MG->arcs[v1][v2] = 1;
            getchar();
        }
    }
    /**
     * 打印邻接矩阵和顶点信息
     */
    void print_MG(MGraph MG) 
    {
        int i, j;
        if(MG.type == DG)
    	{
            printf("Graph type : Direct graph:
    ");
        }
        else
    	{
            printf("Graph type: Undirect graph:
    ");
        }
    	printf("Graph vertex number: %d 
    ",MG.vexnum);
        printf("Graph arc number: %d 
    ",MG.arcnum);
     
        printf("Vertex set:");
        for (i = 1; i <= MG.vexnum; i++)
            printf("%c   ", MG.vexs[i]);
    	printf("
    ");
        printf("Adjacency Matrix:
    ");
     
        for (i = 1; i <= MG.vexnum; i++) 
    	{
            j = 1;
            for (; j < MG.vexnum; j++) 
    		{
                printf("%d   ", MG.arcs[i][j]);
            }
    		printf("%d   ", MG.arcs[i][j]);
    		printf("
    ");
        }
    }
     
    
    int main() 
    {
        MGraph MG;
        create_MG(&MG);
        print_MG(MG);
        return 0;
    }
    
    


    如图:


  • 相关阅读:
    周志华 机器学习
    王亮 中国科学院自动化研究所
    殷明 合肥工业大学
    批处理命令行 for循环
    CalFrechetDist
    等高线简化线方法对比(多尺度评价方法)
    周成虎
    MFC 使用控制台打印程序信息
    C++ 获得本地磁盘盘符的容量信息
    VS2012+CUDA6.0配置方法
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7233454.html
Copyright © 2020-2023  润新知