zoukankan      html  css  js  c++  java
  • 清北学堂—2020.1提高储备营—Day 3(图论初步(一))

    qbxt Day 3

    ——2020.1.19 济南 主讲:李奥

    目录一览

    1.图论(图、图的存储方式、最小生成树的定义)

    总知识点:图论

    前言:众所周知,图论是一个非常重要的部分,而这次集训也可以算从头讲起了,所以说知识点很多,(不过好多还是比较简单的,毕竟是基础。。。。。)

    一、图(纯知识点,初赛常考)
    1.构成:点、边(有向边,无向边)
    无向边构成的图叫做无向图;有向边构成的图叫做有向图(又称双向图)

    2.度:(1)在无向图中,与这个点相连的边的数量叫做这个点的度。(度数和=边数*2)
    (2)在有向图中,度分为两种,分别是入度和出度
    入度指以该点为终点的边的数量,出度指以该点为起点的边的数量
    入度、出度、边数必须满足一个公式:出度和=入度和=边数

    3.图的连通性
    (1)连通块:若一个点所在的集合中任意两个点可以互相到达,则称一个连通块。
    (2)无向图:任意两连通块间无边相连。
    (3)有向图:若一个连通块缩小成一个点,则形成一个拓补图。

    4.特殊的图:树、拓补图(有向无环图,即没有任何一对点可以互相达到)

    二、图的存储方式
    1.邻接矩阵存储
    (1)代码模板

    //不带权有向图 
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++){
    	cin>>x>>y;
    	a[x][y]=1; 
    }
    //不带权无向图 
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++){
    	cin>>x>>y;
    	a[x][y]=1;	
    	a[y][x]=1;
    	//无向图双向标记 
    }
    //带权有向图 
    memset(a,0,sizeof(a))
    for(int i=1;i<=n;i++){
    	cin>>x>>y>>k;	//k表示x到y之间的边的权值为k
    	a[x][y]=1; 
    }
    //带权无向图 
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++){
    	cin>>x>>y>>k;
    	a[x][y]=1;
    	a[y][x]=1;
    	//无向图双向标记 
    }
    

    (2)缺点分析
    邻接矩阵对于两点之间有多边相连的情况,他只能其中一个信息(即不能储存所有信息)
    补救措施:若求最短路,我们只需要记最短的 a[x][y]=min(a[x][y],k);

    2.边列表
    (1)对于有向图,如果一个节点x有多条边相连,邻接链表无法很好的处理,边列表就可以很好的解决。
    (2)结构:

    struct Edge{
        int x,y,k,next;
    }a[101];
    int len;
    

    解释:x指边的起点,y指边的终点,k指该边的权值(有无均可),a[i].next表示与i有共同起点的上一条边的编号。
    不过,对于边列表,我们还需要一个辅助数组first[]。
    first[x]表示以x为起点的第一条边的编号(注意这个第一实际上是最后加入,编号最大的边)。
    代码:

    inline void ins(int x,int y,int k){
        len++;
        a[len].x=x; a[len].y=y; a[len].k=k;
        a[len].next=first[x];first[x]=len;
    }
    memset(first,0,sizeof(first));
    len=0;
    for(i=1;i<=m;i++){
        scanf("%d%d%d",&x,&y,&k);
        ins(x,y,k);
    }
    

    三、最小生成树
    (1)定义:对于一个带权联通的无向图,从m条边中选出恰好n-1条边构成的一棵树称为该图的一棵生成树。
    一个图的生成树中边权和最小的生成树即为最小生成树。
    注:最小生成树可能有多个。

    未完待续。。。。。。

    本文欢迎转载,转载时请注明本文链接
  • 相关阅读:
    读取json中的中文乱码
    Qt新建一个对话框
    Qt窗口全屏
    Qt设置QWidget背景图片
    Qt加载本地图片
    junit5|软断言
    Classpath resource [/data/department/createDepartment.csv] does not exist
    有个用户反馈上传头像失败,分析原因?
    手机扫描二维码的测试用例(转载)
    一次完整的HTTP请求过程是怎么样的呢?【图文详解】(转载)
  • 原文地址:https://www.cnblogs.com/-pwl/p/12288046.html
Copyright © 2011-2022 走看看