算法&&刷题&&C++
分享一些刷题经验,或者调试程序时遇见的问题解决方法等~
一匹好人呀
这个作者很懒,什么都没留下…
展开
-
拓扑排序代码模板C++
算法步骤:①定义一个队列Q,并把所有入度为0的结点加入队列。②取队首结点,输出。然后删去所有从它出发的边,并令这些边到达的顶点的入度减1,如果某个顶点的入度减为0,则将其加入队列。③反复进行②操作,直到队列为空。如果队列为空时入过队的结点数目恰好为N,说明拓扑排序成功,图G为有向无环图;否则,拓扑排序失败,图G中有环。可使用邻接表实现拓扑排序。显然,由于需要记录结点的入度,因此需要额外建立一个数组inDegree[MAXV],并在程序一开始读入图时就记录好每个结点的入度。接下来就只需要按上面所说.原创 2021-08-14 19:53:10 · 2062 阅读 · 3 评论 -
复旦大学计算机2016年机试题“字符串的哈夫曼编码的最短长度“(C++)
题目描述:给定一个字符串(长度不超过100),求哈夫曼编码的最短长度。输入1:abbcccdddd输出1:19输入2:we will we will r u输出2:50求解代码:#include <iostream>#include <string>#include <queue>#include <map>#include <vector>using namespace std;const int max.原创 2021-07-30 11:17:17 · 421 阅读 · 0 评论 -
2020年复旦大学夏令营机试题及代码(VS2019 && C++)
注:代码是本菜鸡自己个儿写的,没有找到参考答案,欢迎各位大佬批评指正.题目如下图所示(图片来源网上):第1题该题主要考察拓扑排序.其实该算法有通用模板,但我写的时候没有意识到使用,代码不是很规范.#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <vector>#include <queue>using namespace std;const int maxn = 110;原创 2021-07-28 23:23:30 · 1123 阅读 · 0 评论 -
背包问题(01背包、完全背包)代码模板C++
完全背包问题和01背包问题的唯一区别就在于:完全背包的物品数量每种有无穷件,选取物品时对同一种物品可以选1件、选2件……只要不超过容量V即可,而01背包的物品数量每种只有1件。01背包#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <algorithm>using namespace std;const int maxn = 100;//物品最大件数const int maxv = 1000;//V原创 2021-07-26 18:04:17 · 1128 阅读 · 0 评论 -
动态规划——最长回文子串代码模板C++
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1010;char S[maxn];int dp[maxn][maxn]; //dp[i][j] = 0表示S[i]到S[j]不是回文子串,dp[i][j] = 1表示S[i]到S[j]是回文子串int main() { cin.getline(S, maxn);原创 2021-07-26 15:43:27 · 200 阅读 · 0 评论 -
动态规划——最长公共子序列LCS代码模板C++
时间复杂度为O(nm)O(nm)O(nm)(n、mn、mn、m分别为两个字符串的长度):#define _CRT_SECURE_NO_WARNINGS#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 100;char A[N], B[N];int dp[N][N];int main() { int n; //从下标原创 2021-07-26 15:01:13 · 184 阅读 · 0 评论 -
Prim算法求最小生成树模板代码C++
先定义MAXV为最大顶点数、INF为一个很大的数字:const int MAXV = 1000;//最大顶点数const int INF = 1000000000;//设INF为一个很大的数邻接矩阵版int n, G[MAXV][MAXV];//n为顶点数,MAXV为最大顶点数int d[MAXV];//顶点与集合S的最短距离bool vis[MAXV] = { false };//标记数组,vis[i]==true表示已访问。初值均为falseint prim() {//默认0号原创 2021-07-24 14:45:24 · 226 阅读 · 0 评论 -
Dijkstra求单源最短路径代码模板C++
在写出具体函数之前,需要先定义MAXV为最大顶点数、INF为一个很大的数字:const int MAXV = 1000;//最大顶点数const int INF = 1000000000;//设INF是一个很大的数邻接矩阵版int n, G[MAXV][MAXV];//n为顶点数,MAXV为最大顶点数int d[MAXV];//起点到达各点的最短路径长度bool vis[MAXV] = { false };//标记数组,vis[i]=true表示已访问。初值均为falsevoid Dijk原创 2021-07-22 23:41:43 · 186 阅读 · 1 评论 -
图的深度优先遍历C++代码模板
const int MAXV = 1000;//最大顶点数const int INF = 1000000000;//设INF是一个很大的数int n; //n为顶点数bool vis[MAXV] = { false };//如果顶点i已被访问,则vis[i]=true.初值为false邻接矩阵版int G[MAXV][MAXV];//MAXV为最大顶点数void DFS(int u, int depth) {//u为当前访问的顶点标号,depth为深度 vis[u] = true; //设原创 2021-07-21 20:09:26 · 522 阅读 · 0 评论 -
堆排序的基本思路、操作、代码
关于堆排序,网上有很多讲解,在学习该算法时我曾找到一个比较好懂的链接(图解推排序),与大家一起分享。堆排序的基本思路将无序序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆(一般升序采用大顶堆,降序采用小顶堆);将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。堆的操作在堆的数据结构中,堆中的最大值总是位于根节点(在优先队列中使用堆的话堆中的最小值位于根节点)。堆中定义以下原创 2021-07-21 18:00:54 · 88 阅读 · 0 评论 -
C语言数据类型的部分知识点整理
整型int也被称为long int,长整型long long也被称为long long int。看到题目要求10^9 以内或者说32位整数,就用int型来存放;如果是10^18 以内或者说是64位整数,就要用long long型来存放。对浮点型来说,不要用float,都应该用double来存储。小写字母比大写字母的ACSCII码值大32.常用的转义字符:\n 代表换行\t 代表Tab键\0 代表空字符NULL,其ASCII码值为0,注意:\0不是空格..原创 2021-05-08 11:24:20 · 238 阅读 · 0 评论 -
C语言基础知识 && C++与STL && 数据结构基础
C语言基础知识程序设计入门在C语言中,整数值用%d输出,实数用 %f 输出。如:printf("%d\n",1+2);printf("%.1f\n",8.0/5.0);一般来说,只要在程序中用到了数学函数,就需要在程序最开始处包含头文件 math.h,并在编译时连接数学库。scanf 中的占位符和变量的数据类型一一对应,且每个变量前需要加“&”符号。如:scanf("%d%d", &a, &b);在算法竞赛中,输入前不要打印提示信息。输出完毕后应立即终止原创 2021-04-26 20:54:28 · 201 阅读 · 0 评论 -
C++ 遇到的 error C2146, C2065 报错信息的解决
今天在编写语法分析程序时,遇到了这样的报错:我参考了不少博客,最后终于找到了解决方法——在文件头添加using namespace std;。C++编译是按顺序进行的,将cpp文件中的using namespace std;移到引入头文件的前面,即可完美解决该问题!参考博客:https://blog.csdn.net/crazyjwang/article/details/11578445...原创 2021-04-17 21:20:12 · 1323 阅读 · 0 评论