挑战程序设计竞赛(算法和数据结构)
文章平均质量分 80
《挑战程序设计竞赛(算法和数据结构)》的总结
喵纳德
热爱生命
展开
-
挑战程序设计(算法和数据结构)—排序
插入排序 稳定排序 O(N^2) 将未排序的头元素插入到已排序的元素中 特点:高速处理顺序较平整的数组,希尔排序的基础 void InsertSort(int a[], int N) { for(int i=1; i<N; i++)#i循环变量,表示未排序的开头元素下标 { int v = a[i];#保存当前元素的值 int j= i-1; ...原创 2019-01-22 23:34:02 · 269 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—九宫格
九宫格 题目19.2链接:8 Queens Problem 需要自己定义转移状态,并使用BFS来确定最小路径。标准的BFS题,只不过状态不好定义。 代码如下: #include <iostream> #include <cstring> #include <map> #include <queue> using nam原创 2019-02-18 16:06:10 · 552 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—动态规划(DP)
文章目录斐波那契数列最长公共子列(LCS)硬币问题 斐波那契数列 题目11.2链接Fibonacci Number 解决斐波那契数列有三种方法 1>直接递归 fib(n) if n==0 || n==1 return 1 return fib(n-1)+fib(n-2) 2>记忆化递归 fib(n) if n==0 || n==1 return原创 2019-02-12 16:26:46 · 318 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—八皇后问题总结
文章目录一道八皇后问题相关问题八皇后解法总结 一道八皇后问题相关问题 题目19.1链接8 Queens Problem 这道题给出已有几个皇后放置的位置,然后让你补全剩下的位置。 自己的方法: 我的方法实际上就是维护一个棋盘矩阵,值为0时可以放置,为-1时表示该位置是皇后,大于0时不可放置,每当放置一个皇后时就要将皇后可以到达的地点+1,当去除一个皇后时需要将皇后可以到达的地点-1。当然我使用了栈...原创 2019-02-18 10:29:48 · 571 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—数论
文章目录质数检验最大公约数幂乘 质数检验 题目18.1链接Prime Numbers 两种方法: 检验质数法 埃拉托色尼筛选法(把范围内的质数全选出来) #include <iostream> #include <cstdio> #include <cstring&原创 2019-02-16 23:40:05 · 208 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—高等图算法
文章目录多源最短路径 多源最短路径 题目15.1链接All Pairs Shortest Path 注意点: 边权值可以为负 需要判断负环 输出每两个点之间的距离,如果不连通则输出INF 方法采用弗洛伊德算法,判断负环的方法是算法执行完后如果一个顶点到自身的距离为负,则代表图中有负环。 算法思路是采用了动态规划思想,Ak[i,j]代表经过了k个中间点的从点i到点j的路径长度,可知有 Ak[i,...原创 2019-02-15 20:40:00 · 233 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—高等数据结构
互质的集合 题目14.1链接 Disjoint Set: Union Find Tree 这道题的思路主要采用了并查集的思想。相关讲解链接在一个很有意思的并查集详解。 第一种方法我采用了链接里的简单的数据结构,就采用pre[i]数组记录i的上级,当i=pre[i]是,i即为根节点。 #include <iostream> #include <cstdio> using原创 2019-02-15 16:29:45 · 219 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—树
树的遍历 树的遍历分为前序遍历(根左右)、中序遍历(左根右)、后序遍历(左右根)。 #include <iostream> #include <cstdio> using namespace std; const int Max = 30; const int NIL = -1; struct Node { int parent, left, right; }; ...原创 2019-02-04 17:07:06 · 195 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—图论(最小生成树、单源最短路径和多元最短路径、拓扑排序)
最小生成树 题目13.2链接Minimum Spanning Tree 采用Prim算法 二者均采用邻接矩阵 第一个采用STL简化了代码(思路直接来源于Prim): #include <iostream> #include <set> using namespace std;原创 2019-02-14 19:13:12 · 446 阅读 · 1 评论 -
挑战程序设计(算法和数据结构)—最小成本排序
题目(7.7)链接: Minimum Cost Sort 思路:找交换的闭合回路,并且使用最小的元素作为交换媒介。当只移动闭合回路里的元素时,有成本函数 : ∑i=0nwi+(n−2)×min(wi)\sum_{i=0}^n w_{i}+(n-2) \times min(w_{i})∑i=0nwi+(n−2)×min(wi)。 当需要使用闭合回路以外的元素作为交换媒介时,有成本函数 : s...原创 2019-02-03 10:13:01 · 458 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—逆序数
题目(7.6)链接: The Number of Inversions 知识点:排序,分治。 技巧:套用归并排序模板,使得复杂度变成了O(Nlog(N)),远小于采用冒泡排序求逆序数时的O(N^2)。重点在与添加了cnt和v1、v2、v3。 #include <iostream> #include <cstdio> using namespace std; typede...原创 2019-02-02 22:41:35 · 255 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—搜索(包括STL)
文章目录线性搜索二分搜索散列法 线性搜索 O(N)(引入标记后效率提升数倍(第二种)) void Linear(int S[], int T[], int ns, int nt) { for(int i=0; i&amp;lt;nt; i++) { /* //第一种 for(int j=0; j&amp;lt;ns; j++) { ...原创 2019-02-02 19:45:53 · 201 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—数据结构的应用(计算面积)
题目(4.6)链接: Areas on the Cross-Section Diagram 栈 求积水总面积: 若为"“则将其下标压入栈s1,若为”/“则从栈顶部取出对应”“的位置ip,算出二者的距离i-ip,并累加到总面积里。(不必考虑”_") 求各积水处的面积: 需要使用结构体(beginx,area),在遇到"/"时,更新栈中原来元素(原来的水坑太小)或压入新元素(遇到新水坑),具体解法键...原创 2019-02-02 17:04:38 · 408 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—数据结构(STL总结)
STL(Standard Template Library)简介 栈 队列 vector(动态数组) list(双向链表) 栈 头文件#include &amp;amp;amp;amp;amp;lt;stack&amp;amp;amp;amp;amp;gt; 使用 stack&amp;amp;amp;amp;amp;lt;int&amp;amp;amp;amp;amp;gt; S; 成员函数 函数名 表功能原创 2019-02-02 15:59:12 · 766 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—DFS和BFS及其一些应用
DFS 题目12.3链接Depth First Search DFS可以使用递归和栈来解。 以下两种方法都是将邻接表转化为邻接矩阵,在图的邻接矩阵上操作。 使用递归: #include &amp;amp;lt;iostream&amp;amp;gt; #include &amp;amp;lt;cstring&amp;amp;gt; using namespace std; const int Max = 105; int原创 2019-02-14 11:47:03 · 305 阅读 · 0 评论