• 数据结构:图



        G = V+E
        G图, V顶点的集合, E边的集合
        
        有向图  弧头 弧尾
        无向图
        
        带权图/网图
        不带权图(一般不这样叫)
        
        有环图
        无环图
        
        稀疏图
        稠密图
        
        存储
            顺序存储:邻接矩阵
            链式存储:邻接表,逆邻接表,十字链表
        
        
        遍历
            深度优先
            广度优先
       

    #ifndef _G_H
    #define _G_H

    typedef char g_data_t;

    #define N 1024

    typedef struct sqg{
        g_data_t v_buf[N];  //存储顶点
        int e_buf[N][N];    //存储边
        
        int v_number;   //标记顶点个数
        int e_number;   //标记边的个数
    }sqg_node,*sqg_pnode;


    //创建图的空间
    sqg_pnode create_space();

    //填写图的值
    int create_sqg(sqg_pnode G);

    //打印图的内容
    int show_sqg(sqg_pnode G);


    #endif
    ///

    #include
    #include
    #include "g.h"


    //创建图的空间
    sqg_pnode create_space()
    {
        sqg_pnode G = (sqg_pnode)malloc(sizeof(sqg_node));
        if(NULL == G)
        {
            printf("malloc is default\n");
            return NULL;
        }
        
        G->v_number = 0;
        G->e_number = 0;
        
        return G;
    }

    //填写图的值
    int create_sqg(sqg_pnode G)
    {
        int i,j;
        //输入顶点个数
        printf("input v_number->");
        scanf("%d", &(G->v_number));
        getchar();
        //给顶点赋值
        printf("input v_data->");
        for(i = 0; i < G->v_number; i++)
        {
            scanf("%c", G->v_buf+i);
            //scanf("%c", &(G->v_buf[i]));
        }
        getchar();
        //初始化二维数组
        for(i = 0; i < G->v_number; i++)
            for(j = 0; j < G->v_number; j++)
            {
                //对角线为0
                if(i == j)
                    G->e_buf[i][j] = 0;
                else
                    G->e_buf[i][j] = 8888;  //其余赋值为无穷
            }
            
        //输入边的个数
        printf("input e_number->");
        scanf("%d", &(G->e_number));
        //输入边的数据
        printf("input e_data head tail w ->");
        int head,tail,w;
        for(i = 0; i < G->e_number; i++)
        {
            scanf("%d%d%d", &head,&tail,&w);
            G->e_buf[head][tail] = w;   //有相图
            //G->e_buf[tail][head] = w;  //无向图需要加一句
        }
        
        return 0;
    }

    //打印图的内容
    int show_sqg(sqg_pnode G)
    {
        //遍历一维数组
        int i,j;
        printf("v_data is \n");
        for(i = 0; i < G->v_number; i++)
        {
            printf("%c ", G->v_buf[i]);
        }
        printf("\n");
        
        //遍历二维数组
        printf("e_data is\n");
        for(i = 0; i < G->v_number; i++)
        {
            for(j = 0; j < G->v_number; j++)
            {
                printf("%4d ", G->e_buf[i][j]);
            }
            printf("\n");
        }
        return 0;
    }

    ///
    #include "g.h"

    int main()
    {
        sqg_pnode G = create_space();
        
        create_sqg(G);
        
        show_sqg(G);

    }
     

  • 相关阅读:
    竞赛人的分享与交流
    【C++】C++基础知识(八)---结构体
    P4551 最长异或路径
    什么是serialVersionUID?serialVersionUID详解
    boost 压缩与解压缩流
    前端开发常用工具库
    elementUI使用el-upload上传文件写法总结及避坑,上传图片/视频到本地/服务器以及回显+删除
    低代码接口开发平台——YesApi(免费注册)
    树莓派4B_OpenCv学习笔记5:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用
    K8s 之 节点亲和性的调度策略(NodeAffinity)
  • 原文地址:https://blog.csdn.net/qq_63626307/article/details/126334444