摘要:
题目: 在上一篇博客的基础上,这是另一种方法求最短路径的问题。 Dijkstra(迪杰斯特拉)算法:找到最短距离已经确定的点,从它出发更新相邻顶点的最短距离。此后不再关心前面已经确定的“最短距离已经确定的点”。 Dijkstra算法采用的是一种贪心的策略,声明一个数组dis来保存源点到各个顶点的最短 阅读全文
摘要:
题目: 最短路:给定两个顶点,在以这两个点为起点和终点的路径中,边的权值和最小的路径。考虑权值为点之间的距离。 单源最短路问题,Bellman-ford算法 思路:每次循环检查所有边,可优化。 应用于旅游等路径最小问题。 代码: 对于上一个代码。可以先把边集提取出来,这样不用每次扫描二维数组。 Ed 阅读全文
摘要:
学习最小生成树算法之前我们先来了解下下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树。 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树。生成树是连通图的极小连通子图。这里所谓极小是指:若在树中任意增加 阅读全文
摘要:
一、问题描述 给定一个具有n个顶点的图,要给图上每个顶点染色并且要使相邻的顶点的颜色不同,问是否最多用2种颜色进行染色?没有重边和自环。把相邻顶点染成不同颜色的问题叫做图的着色问题。对图进行染色所需的最小颜色数,称为最小着色数。最小着色数为2的图称为二分图,如下图所示就是一个二分图。下面代码是用来判 阅读全文
摘要:
一、问题描述 根据图上描述,事实上一步走完是不可能的。可以用如下性质来判断欧拉回路与欧拉道路。 1、如果一个无向图是连通的,且最多只有两个并且最少要包含一个奇点(度数为奇数),则一定存在欧拉道路。 2、如果有两个奇点,它们必须是起点和终点。 3、如果奇点不存在,可以从任意点出发,最终一定会回到该点, 阅读全文
摘要:
一、定义: 没有圈的有向图,叫做DAG(Directed Acyclic Graph,有向无环图) 拓扑排序定义:将DAG中的顶点以线性方式进行排序。即对于任何自顶点u到顶点v的有向边u->v,在最后的排序结果中,顶点u总是在顶点v的前面。这样的排序结果,称为拓扑序。有环图,不存在拓扑排序。 二、拓 阅读全文
摘要:
题目描述: 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。 如果两个字符“@”所在的格子相邻(横、竖或者对角线方向),就说它们属于同一个八连块。 思路: 还是使用图的DFS来解决问题,需要注意的都在代码注释里面。 代码: 阅读全文
摘要:
题目描述: 给定一个方阵,定义连通:上下左右相邻,并且值相同。可以想象成一张地图,不同的区域被涂以不同颜色。 输入: 整数N, (N<50)表示矩阵的行列数 接下来N行,每行N个字符,代表方阵中的元素 接下来一个整数M,(M<1000)表示询问数 接下来M行,每行代表一个询问, 格式为4个整数,y1 阅读全文
摘要:
一、图的表示 从图的逻辑结构定义来看,无法将图中的顶点排列成一个唯一的线性序列。在图中任意一个顶点都可以看成是图的第一个顶点,对任何一个顶点而言,它的邻接点之间也不存在顺序关系。为了方便存储和操作,需要将图中的顶点按一定的序列排列起来。 顶点在图中的位置就是指该顶点在人为确定的序列中的位置。 由于图 阅读全文
摘要:
一、基本概念 图(graph)是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系的集合组成。 图由顶点和边组成,顶点表示对象,边表示两个对象间的连接关系。 图大体分为两种,边没有指向性的叫无向图,边具有指向性的叫有向图。 方向起始的顶点称为起点或尾(弧尾)。方向指向的顶点称为终点或头(弧 阅读全文
摘要:
题目: 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶子结点所经过的结点形成一条路径。这里只讨论简化版本,原题目的意思是路径不限制。 思路: 这种题目经过前面的学习很容易看出使用dfs来解决。这里还使用到了带前缀的dfs,可以和 阅读全文
摘要:
一、问题 求有根树的任意两个节点的最近公共祖先(一般来说都是指二叉树)。最近公共祖先简称LCA(Lowest Common Ancestor)。例如,如下图一棵普通的二叉树。 结点3和结点4的最近公共祖先是结点2,即LCA(3,4)=2 。在此,需要注意到当两个结点在同一棵子树上的情况,如结点3和结 阅读全文