图论
Jayphone17
这个作者很懒,什么都没留下…
展开
-
回溯、图论—— N色地图着色问题
1.问题描述如果我们把地图上的每一个区域都退化成一个点,相邻的区域用连线连接起来,那么地图就变成了一个无向连通图,我们给地图着色就相当于给该无向连通图的每个点着色,要求有连线的点不能有相同的颜色。这就是典型的图的m着色问题。给定无向连通图G m种颜色,找出所有不同的着色方案,使相邻区域有不同的颜色。如以下例子: 该图一共有7个区域,分别是ABCDEFG,我们分别编号1-7...原创 2019-11-07 22:16:34 · 3133 阅读 · 1 评论 -
回溯、图论——最大团问题(求最大完全子图)
1.问题分析要想解决最大团问题,也就是求最大完全子图。我们需要了解相关概念,现在有如下图:(1)完全子图:给定无向图G=(V,E),其中V是顶点集,E是边集。G'=(V',E')如果顶点集V'∈V,E'∈E,且G'种任意两个点有边相连,则称G'是G的完全子图。例如下面的几个图都是上图的完全子图:(2)团:G的完全子图是G的团,当且仅当G'不包含在G的更大的完全子图...原创 2019-11-07 21:41:53 · 11935 阅读 · 4 评论 -
图论——入门级二分图最大匹配Bipartite Matching
1.问题描述我们先来了解一下相关图论的概念:二分图:又称二部图。是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果结点集V可分割为两个互不相交的子集(V1,V2),并且图中的每条边(i,j),所关联的两个结点i和j分别属于这两个不同的结点集,则称G为一个二分图。 匹配:在图论中,一个匹配(matching)是一个边的集合,其中任意两条边都没有公共结点。如图所示就算是一个匹配:...原创 2019-11-01 17:12:56 · 11971 阅读 · 0 评论 -
图论基础——遍历图的BFS
1.问题分析续上一篇博客,用DFS遍历图:图论基础——遍历图的DFS同时我们也可以用BFS来对这个图进行遍历,遍历的时间戳标注在上面:2.算法设计利用广度优先搜索来遍历这个图的过程如下:首先以一个未被访问过的顶点作为起始顶点,比如1号顶点作为起点.再将一号顶点放入队列中,然后将1号顶点相邻的未访问过的顶点即2、3、5号顶点一次再放入队列中,如下图:接下...原创 2019-10-31 16:56:00 · 314 阅读 · 0 评论 -
图论基础——遍历图的DFS
1.问题分析:首先先介绍一下什么是图(graph):简单大白话地说,图就是由一些小圆点(顶点)和一些把这些小圆点连接起来的直线(边)组成的,如图所示:现在在我们要做的就是对这个图的所有顶点遍历一遍,也就是都访问一次。我们这里使用深度优先搜索来遍历这个图,会得到以下的结果:遍历这个图的访问顺序如下:每个顶点上面的红色数字代表这个顶点是第几个被访问的,我们称为时间戳...原创 2019-10-31 16:45:33 · 477 阅读 · 0 评论 -
数据结构——堆,小顶堆,大顶堆,堆排序
1.简介堆是什么?堆是一种特殊的完全二叉树,就像下面这棵树一样:这棵树有一个很显著的特点,那就是所有父结点都要比子结点要小。符合这样要求的完全二叉树我们成为“最小堆”。反之,如果所有父结点都要比子结点大,这样的完全二叉树被称为”最大堆“。2.下移ShiftDown如果我们现在要删除掉最小的数字,并重新插入一个数字,再从中找出最小的数字。目前只能够先扫描所有的数字,找到最...原创 2019-10-21 18:15:34 · 2987 阅读 · 2 评论 -
数据结构——邻接表Adjacency List
邻接表是图的一种最主要的存储结构,用来描述图上的每一个点。对图的每个顶点建立一个容器,第i个容器中的结点包含顶点Vi的的所有临界顶点。如下图所示,有向图对应的邻接表:1.数据结构邻接表用到两个数据结构:(1)一个是头结点表,用一维数组存储。包括顶点和指向第一个邻接点的指针。(2)一个是每个顶点Vi的所有邻接点构成的一个线性表,用单链表存储。无向图成为顶点...原创 2019-10-04 15:37:41 · 5743 阅读 · 1 评论 -
贪心——最小生成树Kruskal算法
构造最小生成树还有一种算法,Kurskal算法:设G=(V,E)是无向连通带权图,V={1,2,…,n};设最小生成树T=(V,TE),该树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),Kruskal算法将这n个顶点看成是n个孤立的连通分支。它首先将所有的边按权值从小到大排序,然后只要T中选中的边数不到n−1,就做如下的贪心选择:在边集E中选取权值最小的边(i,j),如果将边(i,j...原创 2019-10-04 13:52:46 · 1050 阅读 · 0 评论 -
图论、DP思想——多源最短路径Floyd-Warshall 算法
1.算法简介:Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。 在计算机科学中,Floyd-Warshall算法是一种在具有正或负边缘权重(但没有负周期)的加权图中找到最短路径的算法。算法的单个执行将找到所有顶点对之间的最短路径的长度(加权)。 虽然它不返回路径本身的细节,但是可以通过对算法的简单修改来重建路径。...原创 2019-09-28 19:34:32 · 1290 阅读 · 0 评论 -
贪心、图论——单源最短路径Dijkstra算法
1.问题分析:单源最短路径问题。给定一个有向带权图G=(V,E),其中每条边的权是非负实数(Dijkstra不支持处理带负权边的)。此外给定V中的一个顶点,成为源点。现在要计算从源点到各顶点的最短路径长度,这里路径长度指路上各边的权之和。2.算法设计:Dijkstra算法是解决单源最短路径的贪心算法,它求出长度最短的一条路径,再参照最短路径求出长度次短的一条路径,直到求出从源...原创 2019-09-28 19:18:15 · 552 阅读 · 0 评论