- 博客(20)
- 收藏
- 关注
原创 D3-八数码
在一个 3×3的网格中,1∼8这 8数字和一个 x 恰好不重不漏地分布在这 3×3的网格中。在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为正确排列
2024-04-15 22:46:25
201
1
原创 D2-走迷宫
给定一个 n×m的二维整数数组,用来表示一个迷宫,数组中只包含 0或 1,其中 0表路,表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需次。数据保证 (1,1)处和 (n,m)处的数字为 0,且一定至少存在一条通路。
2024-04-14 23:17:28
203
1
原创 D1-n皇后
n−皇后问题是指将 n个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
2024-04-13 22:50:04
350
1
原创 c++ getline()详解
etline()函数在c++中有两种用法,第一种定义在$$头文件中,第二种定义在$头文件中。getline()在这两种用法中都是用于读入一行字符串,可以带空格等特殊字符,在第二种用法中getline的第一个参数传的是`流`,比如:cin和stringstream
2022-12-06 17:55:06
14023
原创 最全动态规划题型详解
通俗的讲动态规划(dp)的核心就是记住已经解决过子问题的解,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。dp常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所消耗的时间往往远小于朴素解法。
2022-11-17 20:54:35
7640
6
原创 linux 中 vim/vi的常用命令
vi的三种基本工作模式:normal模式:正常模式insert模式:插入模式command模式:底部命令模式、末行模式。
2022-11-09 20:20:26
1544
原创 详解五种最短路径算法及其区别(c++)
目录一.朴素Dijkstra算法二.堆优化的Dijkstra三.bellman_ford算法四.spfa算法五.floyd算法总结: 算法基本思路:eg:1. 2.3. 4.红色表待定的4. 5. 6. 简单地说就是先找出一个距离起点最近的,然后再由这个距离起点最近的点更新别的点朴素dijkstra模板题:题目:https://www.acwing.com/problem/content/851/ 代码如下:二.堆优化的Dijkstra算法步骤和朴素算法一样,只是
2022-07-03 17:06:52
3360
原创 n皇后最简洁且易懂(c++)
题目如下:代码如下:如果看不懂下面回溯解法,请看#include<bits/stdc++.h>using namespace std;const int N = 20;int n;char g[N][N];//col一列是否用过,dg正对角线是否用过,udg反对角线是否用过 //udg和dg若为true则说明这两条对角线已经用过了不能再用了 bool col[N],dg[N],udg[N];void dfs(int u){ if(u == n) {
2022-05-29 09:24:54
181
原创 位运算求十进制转换二进制
步骤:1.先根据n的值判断此数的二进制位数(2的n次方)2.将此数二进制的最高为右移i位到最右边(n>>i)3.&1后输出(&1为了输出)#include<bits/stdc++.h>using namespace std;int main(){ int n = 10;//2^4=16所以10的二进制有4位 for(int = 3;i>=0;i--)//将此数二进制的最高为右移i位到最右边,&1后输出
2022-05-09 10:57:48
599
转载 彻底搞懂回溯法(本文真的很详细)
目录回溯法理论基础组合问题组合问题转载于:https://zhuanlan.zhihu.com/p/302415065回溯法理论基础「回溯是递归的副产品,只要有递归就会有回溯」,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。回溯算法能解决如下问题:组合问题:N个数里面按一定规则找出k个数的集合 排列问题:N个数按一定规则全排列,有几种排列方式 切割问题:一个字符串按一定规则
2022-03-20 22:24:45
77436
22
原创 拓扑排序 C++
在AOV网中,若不存在回路,则所有活动可排列成一个线性序列,使得每个活动的所有前驱活动都排在该活动的前面,我们把此序列叫做拓扑序列(不是唯一的),由AOV网构造拓扑序列的过程叫做拓扑排序...
2022-03-10 21:21:42
1052
原创 双指针算法
什么是双指针双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,一般用于求数组的相关问题。对撞指针对撞指针是指在数组中,将指向最左侧的索引定义为左指针(left),最右侧的定义为右指针(right),然后从两头向中间进行数组遍历。当遇到连续数组和字符串时第一时间想到对撞指针解题能省一次for循环。伪代码如下:while(left<right){ left++; right
2022-03-06 09:28:56
637
原创 粗略判断算法是否超时
一般评测机一秒最多可以运行 一亿次 即 10^8次。而一般编程竞赛都会将时间限制为 1000ms 即 1s。在这种情况下,C++ 代码的操作次数控制在 10e7~10e8为最佳。1000ms意味着O(n3)的算法,可以几百,一般题目给的数据范围为100。O(n2)的算法,可以几千,一般不到万,经常出现的就是数据范围1000。O(nlongn)或者O(n)的算法,最常见的数据范围就是为100000。下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:参考:如何由数据
2022-03-05 21:47:13
1895
原创 经典排序算法总结(C++)
常见的分类算法还可以根据排序方式分为两大类:比较排序和非比较排序,比较排序就是常见的几种。 非比较排序的特点是时间复杂度很低,都是线性复杂度O(n),但是非比较排序受到的限制比较多,不是通用的排序算法,有如下几种: 1)计数排序(Count Sort)(复杂度O(n+k)(其中k是待排序的n个数字中最大值) 2)基数排序(Bucket Sort)(复杂度O(nk)(其中k是最大数字的位数) 3)桶排序(Radix Sort)(复杂度O(n+k)(其中k是待排序的n........
2022-03-04 22:42:13
516
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人