![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法学习
菜鸟入门acm
FreshHhand
这个作者很懒,什么都没留下…
展开
-
实验六:巧克力问题
巧克力问题: 有袋子里均匀地装着 c 种颜色的巧克力,每种巧克力均有无限多。每次从袋子里拿一块 放在桌子上,如果桌子上已经有一块颜色相同的巧克力,就把两块巧克力都吃掉。一共 取出了 n 块巧克力,问:最后桌子上有 m 块的概率为多大。例如 c=5,n=100,m=2 时,概 率为 0.625。#include<iostream>using namespace std;double c; //c种颜色double d...原创 2022-01-01 16:42:18 · 844 阅读 · 0 评论 -
实验一:骑士游历问题(国际象棋)
在国际棋盘上使一个骑士遍历所有的格子一遍且仅一遍,对于任意给定的顶点, 输出一条符合上述要求的路径。#include<iostream>#include<iomanip>using namespace std;const int N = 8; //棋盘维数int travel[8][8] = { 0 }; //记录骑士的游历过程,如果是0未被访问,否则为骑士到达该点走的步数int record = 0; //计数器记录步数/*Function:判断该点是原创 2021-12-31 13:37:34 · 1246 阅读 · 0 评论 -
实验三:房间最短路问题
题目描述:房间最短路问题 - 洛谷#include<iostream>using namespace std;int n;double x, a1, b1, a2, b2;class wall {public: wall() {}; wall(double x, double a1, double b1, double a2, double b2) { this->a1 = a1; this->a2 = a2; this->x = x;.原创 2021-12-30 22:21:46 · 590 阅读 · 0 评论 -
实验三:凸包(输入点坐标计算凸包坐标)
参考:找凸包方法_RedGeek的博客-CSDN博客以及老师上课的PPT(幕布里)#include <iostream> #include <utility> #include <vector> #include <algorithm> using namespace std;typedef pair<double, double> POINT;vector<POINT>vec; //原创 2021-12-30 21:30:23 · 521 阅读 · 0 评论 -
I.病毒(RNA碱基对循环字符串判定)
就是图的深度优先搜索,然后判断个循环。#include<iostream>#include<vector>using namespace std;int row_num; //初始的num值,用于后面的减法int N, M;char* base; //相当于顶点表,可以查找对应的字母所在下标,然后去edge找找有没有边int edge[100][100];int vis[100]; //顶点访问记录vector&.原创 2021-12-30 17:13:28 · 191 阅读 · 0 评论 -
E.字符串排序(每个操作都得到新字符串,按字典排序)
#include<iostream>#include<string>#include<algorithm>using namespace std;int n, k; //n是字符串长度,k表示第k次操作string a; //就是输入的字符串string* ss; //用来装每次操作之后的astring* operate; //存放操作说明,比如1 0 2 eint iii;//算出来的...原创 2021-12-30 17:01:04 · 498 阅读 · 0 评论 -
G.连边问题(树特定结点连边)
题目描述:思路:真没想到,题目的“可以连一条边”的意思是,就是得连一条边上去,更新原来的图,然后才继续找满足depth=3的结点,而不是只是记录可以连这么一条边就行了。是题目有问题还是我理解能力不行?用图的DFS应用到树的DFS,因为树就是特殊的图,也可以用邻接矩阵来表示。用深度优先搜索,从一个节点出发,查找离他深度为3的结点,然后连线,并更新图(树)的邻接矩阵。然后从连线处再次出发,递归调用DFS,传入depth=1。这是为了找到新加边之后,从这条边走出去有没有新的dept...原创 2021-12-26 18:36:19 · 460 阅读 · 0 评论 -
实验六:KMP算法匹配字符串,求子串索引
字符串匹配的KMP算法 - 阮一峰的网络日志#include <iostream>#include <cstring>#include <string>#include <set>using namespace std;// 1. 求出部分匹配值表,相当于next数组// 2. 移动次数 = 已匹配个数 - 最后一个匹配的字符的部分匹配结果void BuildPatchMatchTable(int* partMatchTable, c原创 2021-12-27 22:16:44 · 293 阅读 · 0 评论 -
实验一:倒水问题(给两个没有刻度的瓶子,量出某体积)
给定 2 个没有刻度容器,对于任意给定的容积,求出如何只用两个瓶装出 L 升 的水,如果可以,输出步骤,如果不可以,请输出 No Solution。DFS(自己瞎写的):#include<iostream>#include<vector>#include<string>using namespace std;int target;int x_m, y_m;vector<int>v; //记录出现过...原创 2021-12-27 15:05:09 · 1627 阅读 · 1 评论 -
BFS解决迷宫问题,第二种方式,代码差不多但是更简单
受这个视频启发:地图上各个坐标点距离起点的depth直接封装在Pos里面就可以了,省得还要建一个二维矩阵对应地图上每个点的depth。而且,不需要用来之前那个定理一,因为BFS搜索到终点的时候,路径一定是最短的。因为BFS是一层一层往外扩张的,不是一条路走下去的。BFS广搜解决迷宫问题_哔哩哔哩_bilibili#include <queue>#include <memory>#include <cstdlib>#include <cstri原创 2021-12-22 21:27:04 · 731 阅读 · 0 评论 -
第二题(DFS)
题目解题思路:①用户如何输入这个赛道的图?写在文件里面,fstream读取结点数放到变量nMax,读取结点之间的关系,放到一个vector<vector<int>>容器里②判断必经点:把这些点一个个挖掉,用深度优先搜索看看能不能遍历到终点,可以的话就说明不是必经点。反之则是必经点。把必经点都放到一个vector数组③判断分裂点:每判断出一个必经点,放入vector之后,紧接着判断该点是否为分裂点。两个for循环中,用if语句让j是必经点左边的结点号,k是必经.原创 2021-12-02 22:30:35 · 195 阅读 · 0 评论 -
广度优先搜索BFS:迷宫最短路径问题
#include <queue>#include <memory>#include <cstdlib>#include <cstring>#include <iostream>using namespace std;const int MAX_SIZE = 25;const int INF_INT = 0x3f3f3f3f;struct Pos{ int x, y; //关系运算符重载,判等 bool.原创 2021-11-30 20:11:19 · 721 阅读 · 0 评论