首页 > 其他分享 >64.《oj-图绪论》

64.《oj-图绪论》

时间:2024-10-17 09:44:08浏览次数:8  
标签:连通 有向图 oj 绪论 邻接矩阵 算法 无向 64 顶点

简单的分为四大点内容

1 概念

有向图和无向图
image

完全图 无向图 n(n-1)/2条边 有向图 n(n-1)条边 注意要和后面的连通区别开
image

连通图(无向图)和强连通图(有向图)及其分量 注意 连通即指两点之间可以连通 如2和3通过1可以连通 区别不同于完全图 整体就是一个连通分量
image

还有一些小概念:
1.连通图的生成树是一个极小连通图(连通且边数最少的子图) 顶点数n 则生成树含有n-1条边
2.无向图的全部顶点度之和等于边数的2倍
3.有向图顶点的度为出度和入度之和 全部顶点的出度和入度之和相等
4.稠密图(邻接矩阵法 Prim算法) 稀疏图(邻接表法 Kruskal算法)
5.若一个图有n个顶点且有大于n-1条边 此图一定有环
6.顶点不重复出现的路径称为简单路径

看一些考题:

一个有28条边的非连通无向图至少有几个顶点
image

具有6个顶点的无向图 当有几条边时可以确保为一个连通图
同上面一个题一样就是反过来了
image

无向图有23条边 度4的顶点5个 度3的4个 其余都是度2的顶点 则含有多少个顶点
这个利用的就是第2条知识点:无向图的全部顶点度之和等于边数的2倍
23x2-4x5+3x4=14 14/2=7 7+5+4=16个

如下图有向图 有几个强连通分量
强连通分量即有向图的极大强连通子图
image


2 邻接矩阵法(二维数组存储)和邻接表法(链式存储)

两张图搞定:
image
image

总结的一些小技巧:
1.对于无向图邻接矩阵 顶点的度为一行非0元素的个数 即相关边的个数
2.对于无向图邻接表 顶点的度对应一行边表结点数
3.对于有向图邻接矩阵 顶点的度为一行一列非0元素之和
4.对于有向图邻接矩阵 顶点出度为一行非0元素之和 入度为一列非0元素之和
5.对于有向图邻接表 容易算出顶点的出度
6.无向图的邻接矩阵一定是一个对称矩阵
7.无论有向图还是无向图 邻接矩阵都唯一
8.无向图 存储空间为O(|V|+2|E|)  V顶点集 E边集
9.无向图 存储空间为O(|V|+|E|)
10.不太考察的 十字链表(有向图) 邻接多重表(无向图)

很抽象吧 直接做题就能很容易理解:

若图邻接矩阵中主对角线上元素皆为0 其他皆为1 则该图一定是...
每两个相连 为完全图
image
每个顶点的度是多少
先判断是无向图还是有向图 然后再求解
image


3 广度优先搜索(BFS) 深度优先搜索(DFS)

这个无法写出来 只能图来表示更容易理解
1.BFS类似于二叉树的层序遍历
2.DFS类似于数的先序遍历(递归算法)
3.BFS和DFS算法时间复杂度 基于邻接矩阵时O(|V|^2) 基于邻接表时O(|V|+|E|)
4.基于邻接矩阵的遍历得到的BFS和DFS序列唯一
5.基于邻接表遍历得到的BFS和DFS序列不唯一

无向图G=(V,E) V={a,b,c,d,e,f} E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)} 则从a开始进行深度优先遍历 得到的顶点序列为
最好的方式就是根据以上信息画出无向图G 当然也可以通过选项快速排除
例如:abecdf 错误 abe 和e相连的且没有访问过的只有d 所以错误
acfebd acf 和f相连且没有访问过的只有d 所以错误

如下图 深度优先遍历得到的不同个数为几个
image

以下邻接表 画出其深度优先生成树和广度优先生成树
image
image


4 最小生成树 最短路径 拓扑排序

最小生成树:
1.当存在权值相同的边 最小生成树可能不唯一
2.当各边权值互不相等 最小生成树唯一
3.Prim算法Kruskal算法
4.Prim算法时间复杂度 O(|V|^2)
5.Kruskal算法时间复杂度 O(|E|log2为底|E|)
Prim算法Kruskal算法(最小生成树)

Prim算法 就是找顶点集合 然后加入距离最近的顶点(选顶点)
注意要加入选取的是未选取过的顶点
image

Kruskal算法 就是选边集合 加入两边的顶点(选边)
注意选取的边两端顶点是不在一个连通分量里的
image

题目:

15统考真题 带权最小代价(生成)树 可能是Kruskal算法第2此选中但不是Prim算法(从V4开始)第2次选中的边是()
image

Kruskal算法和Prim算法下面无向图的最小生成树
image
image
image

最短路径
1.单源最短路径:某一顶点到其他各顶点的最短路径 Dijkstra算法
2.每对顶点间的最短路径 Floyd算法
3.Dijkstra算法不适用于边上带负权值
4.Floyd算法不适用于包含总权值为负的回路
5.Dijkstra算法时间复杂度 O(|V|^2)
6.Floyd算法时间复杂度 O(|V|^3)

Dijkstra算法对于有向带权图 从源点a到其他各顶点最短路径 第一条最短路径目标顶点b 第二条为c 其余最短路径目标顶点依次是
就是不断的找最短路径 然后一直往下找 顺便更新最短路径
image

Floyd算法基本很简单 也不怎么考察
肉眼就可以观察出来任意两点的最短路径
image

题目:

2021统考真题 使用Dijkstra算法从顶点1到其余各顶点的最短路径 将当前找到的从顶点1到顶点2,3,4,5最短路径长度保存在数组dist中 求出第二条最短路径后 dist内容更新为什么
image

拓扑排序(有向无环图)
1.拓扑排序的结果可能不唯一
2.对于一般图来说 若其邻接矩阵是三角矩阵 则存在拓扑序列
3.拓扑排序的步骤就是 找入度为0的顶点删除相关有向边 依次往下进行直到没有顶点
4.逆拓扑排序就是反过来 找出度为0的顶点倒退删除

直接看题:

下图进行拓扑排序 可得到不同的拓扑序列个数是多少
image

关于拓扑排序说法错误的
1.强连通图(顶点数大于1)不能进行拓扑排序
2.一个有向图的拓扑序列中 若顶点a在b之前 图中必有一条弧<a,b>
image

结束!!!

标签:连通,有向图,oj,绪论,邻接矩阵,算法,无向,64,顶点
From: https://www.cnblogs.com/gaodiyuanjin/p/18470562

相关文章

  • 获取街道、镇级的地图geoJson数据方法
    获取geoJson数据①、第一种方法(不可获取街道、镇级数据)可以直接获取全国、各省、各市以及个县级市详细地图信息的geoJson数据阿里云数据可视化平台http://datav.aliyun.com/portal/school/atlas/area_selector注意:目前平台还拿不到街道、镇的区域数据。②、第二种方法(可获取街......
  • CodeForces - 1364D
    通常的想法是:如果图是一棵树,那么通过对顶点进行双色染色,并从更频繁的颜色中选取顶点,就可以轻松找到大小为\(\lceil\frac{n}{2}\rceil\)的独立集合。否则,图就是循环的。让我们得到一个没有任何边“穿过”的循环。换句话说,它没有任何一对不相邻的顶点由边连接。如果它的长度最多......
  • 代码随想录训练营第64天|bellman_ford
    47.参加科学大会#include<iostream>#include<vector>#include<list>#include<queue>#include<climits>usingnamespacestd;//小顶堆classmycomparison{public:booloperator()(constpair<int,int>&lhs,constpai......
  • Project Euler 588 题解
    这玩意好像甚至有递推式……不太懂(为什么是图片?cnblogs第一个公式没渲染成功)时间复杂度是\(O(4^{\degF}\logK)\)的。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmaxn=100;intf[17][maxn],cur[10],al[4];intcalc(intK){ //cer......
  • 每日OJ题_牛客_礼物的最大价值_路径dp_C++_Java
    目录牛客_礼物的最大价值_路径dp题目解析C++代码Java代码牛客_礼物的最大价值_路径dp礼物的最大价值_牛客题霸_牛客网(nowcoder.com)描述:        在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子......
  • 64页精品PPT | 汽车经销商数据应用解决方案
    汽车经销商正面临前所未有的盈利能力挑战。从18年起,传统燃油车汽车行业开始步入低速增长阶段,卖车已经挣不到钱,利润往往来自任务完成的厂家返利;新兴的直营模式的出现,冲击了传统授权经销的方式,疫情让这种情况“雪上加霜”。该资料共64页可编辑PPT格式,本文重点展现PPT整体......
  • Project ‘org.springframework.boot:spring-boot-starter-parent:2.7.7’ not found
    原文链接:Project‘org.springframework.boot:spring-boot-starter-parent:2.7.7’notfound–每天进步一点点(longkui.site)某日构建springboot项目,构建完毕以后发现下面这样然后打开pom文件,发现springboot的依赖爆红(这个版本号是随便举例)我去本地仓库看了看,有这个依赖,......
  • Project Euler 638 题解
    q-analog,老玩家集体起立!这也就是说:\[\binom{n+m}{n}_q=\sum_{\pi\inL_{n,m}}q^{area(\pi)}\]结束!#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmod=1e9+7,maxn=2e7+5;intqp(inta,intb,intp=mod){ intres=1; while(b){ i......
  • Project Euler 457 题解
    初等数论小题目求\[n^2-3n-1\equiv0\pmod{p^2}\]配方,得到:\[(2n-3)^2\equiv13\pmod{p^2}\]根据亨泽尔引理,只需得到\((2n-3)^2\equiv13\pmod{p}\)的解即可提升到\(p^2\)。这是二次剩余,直接解。单次求解\(O(\logn)\),时间复杂度\(O(n)\)。#include<bits/stdc++.h......
  • 【PYTHON】图片和base64互转实践
    目录1导入依赖2image_to_base643base64_to_image1导入依赖importbase64fromPILimportImageimportio2image_to_base64defimage_to_base64(image_path):"""将图片文件转换成Base64编码的字符串:paramimage_path:图片文件的路径:retu......