![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 58
努力的敲码工
一个平平无奇的追梦者
展开
-
Python:蓝桥幼儿园(并查集)
小明想让所有学生都互相成为朋友,但是蓝桥幼儿园的学生实在太多了,他无法用肉眼判断某两个学生是否为朋友。于是他起来了作为编程大师的你,请你帮忙写程序判断某两个学生是否为朋友(默认自己和自己也是朋友)。第 1 行包含两个正整数 N,M,其中 N 表示蓝桥幼儿园的学生数量,学生的编号分别为 1∼N。蓝桥幼儿园的学生是如此的天真无邪,以至于对他们来说,朋友的朋友就是自己的朋友。对于每个 op=2 的输入,如果 x 和 y 是朋友,则输出一行。小明会用红绳连接两名学生,被连中的两个学生将成为朋友。原创 2023-02-28 22:40:27 · 189 阅读 · 0 评论 -
Python:每日一题之跳蚱蜢优化(双向广搜)
由于起点和终点的串不同,正向BFS和逆向BFS扩展的下一层数量也不同,也就是进入2个队列的串的数量不同,先处理较小的队列,可以加快搜索速度。原创 2023-02-18 13:57:17 · 112 阅读 · 0 评论 -
Python:跳蚱蜢(BFS判重)
请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列, 并且保持空盘的位置不变(也就是 1−8 换位,2−7换位,...),至少要经过多少次跳跃?如下图所示: 有 9 只盘子,排成 1 个圆圈。其中 8 只盘子内装着 8 只蚱蜢,有一个是空盘。我们把这些蚱蜢顺时针编号为 1 ~ 8。每只蚱蜢都可以跳到相邻的空盘中, 也可以再用点力,越过一个相邻的蚱蜢跳到空盘中。原创 2023-02-17 22:34:16 · 553 阅读 · 0 评论 -
Python:每日一题之全球变暖(BFS连通性判断)
连通性判断:图论的一个简单问题,给定一张图,图由点和连接点的边组成,要求找到图中互相连通的部分。BFS判断连通性的步骤:·从图上任意一个点u开始遍历,把它放进队列中。·弹出队首u,标记u已搜过,然后搜索u的邻居点,即与u连通的点,放到队列中。·继续弹出队首,标记搜过,然后搜索与它连通的邻居点,放进队列。继续以上步骤,直到队列为空,此时一个连通块已经找到。其他没有访问到的点,属于另外的连通块,按以上步骤再次处理这些点。最后所有点都搜到,所有连通块也都找到。连通性判断什么岛屿不会被完全淹没?原创 2023-02-16 20:00:40 · 350 阅读 · 0 评论 -
Python:每日一题之分巧克力(二分法)
以下 N 行每行包含两个整数 Hi,Wi ( 1 ≤ Hi, Wi ≤ 10^5 )。小张一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形。例如一块 6x5 的巧克力可以切出 6 块 2x2 的巧克力或者 2 块 3x3 的巧克力。小张需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。第一行包含两个整数 N,K ( 1 ≤ N , K ≤ 10^5 )。输入保证每位小朋友至少能获得一块 1x1 的巧克力。输出切出的正方形巧克力最大可能的边长。形状是正方形,边长是整数;原创 2023-02-03 14:25:50 · 607 阅读 · 0 评论 -
Python算法:BFS
BFS搜索的原理:“逐层扩散”。从起点出发,按层次从近到远,逐层先后搜索。编码:用队列实现。应用:BFS一般用于求最短路径问题,BFS的特点是逐层搜索,先搜到的层离起点更近。原创 2023-02-16 00:15:00 · 914 阅读 · 0 评论 -
Python:每日一题之迷宫(队列实现BFS)
题目求字典序最小的最短路径在每次扩散下一层(往BFS的队列中加入下一层的结点)时,按字典序“D原创 2023-02-15 14:10:44 · 592 阅读 · 0 评论 -
Python:每日一题之完全二叉树的权值
一棵有N个结点的满二叉树,树的高度是0(logN)。从根结点到叶子结点,只需要走logN步,例如N=100万,树的高度仅有20,只需要20步就能到达100万个结点中的任意一个。二叉树的每个节点不必全有左、右孩子,可以只有一个孩子或没有孩子,没有孩子的结点称为叶子节点。例如:满二叉树或完全二叉树,二叉树每一层的结点数量按2的倍数递增,能极快地扩展到很大的范围。如果满二叉树只在最后一层有缺失,并且缺失的编号都在最后,那么称为完全二叉树。如果每一层的结点数都是满的,称为满二叉树。注:根的深度是 1。原创 2023-01-14 19:45:53 · 758 阅读 · 0 评论 -
Python:每日一题之剪格子(DFS剪枝)
本题的要求就是请你编程判定:对给定的 m×n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。程序先读入两个整数 m,n 用空格分割 (m,n原创 2023-02-12 13:03:10 · 466 阅读 · 0 评论 -
Python:每日一题之全球变暖(DFS连通性判断)
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有 2 座岛屿。照片保证第 1 行、第 1 列、第 N 行、第 N 列的像素都是海洋。请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。第一行包含一个整数 N (1≤N≤1000)。以下 N 行 N 列代表一张海域照片。输出一个整数表示答案。原创 2023-02-10 14:08:37 · 819 阅读 · 0 评论 -
Python算法:DFS排列与组合算法(手写模板)
例:前三个数的全排列(从小到大)打印 n 个数中,任意 m 个数的排列 4个数中,任意3个数的排列自写组合算法: 1、例:打印二进制数,以打印000~111为例(若需要反过来打印,只需交换第8、10行) 2、例:打印组合,以3个数{ 1,2,3 }为例原创 2023-02-09 20:42:38 · 1099 阅读 · 3 评论 -
Python算法:深度优先搜索—DFS(模板及其样例)
【介绍】•沿着一条路径一直搜索下去,在无法搜索时,回退到刚刚访问过的节点。•并且每个节点只能访问一次。•本质上是持续搜索,遍历了所有可能的情况,必然能得到解。•流程是一个树的形式,每次一条路走到黑。•目的主要是达到被搜索结构的叶结点直到最后一层,然后回退到上层,被访问过的节点会被标记,然后查看是否有其他节点,如果有则继续下一层,直到最后一层。一次类推直到所有节点都被查找。【思想】后访问的节点,其邻接点先被访问。根据深度优先遍历的定义,后来的先搜索(栈、递归)。【步骤】原创 2023-02-08 22:39:00 · 6179 阅读 · 2 评论 -
Python:每日一题之快乐司机(贪心法)
现在知道了汽车核载重量为 w,可供选择的物品的数量 n。每个物品的重量为 gi, 价值为 pi。(n原创 2023-02-06 16:30:18 · 102 阅读 · 0 评论 -
Python算法:前缀和与差分
数组a[0]~a[n-1],前缀和sum[i]等于a[0]~a[i]的和:sum[0]=a[0] sum[1]=a[0]+a[1] sum[2]= a[0]+ a[1]+a[2]能在0(n)时间内求得所有前缀和:sum[i] = sum[i-1]+a[i]预计算出前缀和,能快速计算出区间和: a[i] + a[i+1] +... +a[j-1]+a[j]= sum[j]- sum[i-1]复杂度为O(n)的区间和计算,优化到了O(1)的前缀和计算一维差分数组D[k]=a[k] -原创 2023-02-05 15:19:32 · 869 阅读 · 0 评论