
挑战程序设计竞赛(算法和数据结构)
文章平均质量分 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 · 319 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—九宫格
九宫格题目19.2链接:8 Queens Problem需要自己定义转移状态,并使用BFS来确定最小路径。标准的BFS题,只不过状态不好定义。代码如下:#include <iostream>#include <cstring>#include <map>#include <queue>using nam原创 2019-02-18 16:06:10 · 607 阅读 · 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 · 355 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—八皇后问题总结
文章目录一道八皇后问题相关问题八皇后解法总结一道八皇后问题相关问题题目19.1链接8 Queens Problem这道题给出已有几个皇后放置的位置,然后让你补全剩下的位置。自己的方法:我的方法实际上就是维护一个棋盘矩阵,值为0时可以放置,为-1时表示该位置是皇后,大于0时不可放置,每当放置一个皇后时就要将皇后可以到达的地点+1,当去除一个皇后时需要将皇后可以到达的地点-1。当然我使用了栈...原创 2019-02-18 10:29:48 · 615 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—数论
文章目录质数检验最大公约数幂乘质数检验题目18.1链接Prime Numbers两种方法:检验质数法埃拉托色尼筛选法(把范围内的质数全选出来)#include <iostream>#include <cstdio>#include <cstring&原创 2019-02-16 23:40:05 · 258 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—高等图算法
文章目录多源最短路径多源最短路径题目15.1链接All Pairs Shortest Path注意点:边权值可以为负需要判断负环输出每两个点之间的距离,如果不连通则输出INF方法采用弗洛伊德算法,判断负环的方法是算法执行完后如果一个顶点到自身的距离为负,则代表图中有负环。算法思路是采用了动态规划思想,Ak[i,j]代表经过了k个中间点的从点i到点j的路径长度,可知有Ak[i,...原创 2019-02-15 20:40:00 · 266 阅读 · 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 · 245 阅读 · 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 · 229 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—图论(最小生成树、单源最短路径和多元最短路径、拓扑排序)
最小生成树题目13.2链接Minimum Spanning Tree采用Prim算法二者均采用邻接矩阵第一个采用STL简化了代码(思路直接来源于Prim):#include <iostream>#include <set>using namespace std;原创 2019-02-14 19:13:12 · 487 阅读 · 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 · 496 阅读 · 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 · 290 阅读 · 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 · 230 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—数据结构的应用(计算面积)
题目(4.6)链接: Areas on the Cross-Section Diagram 栈求积水总面积:若为"“则将其下标压入栈s1,若为”/“则从栈顶部取出对应”“的位置ip,算出二者的距离i-ip,并累加到总面积里。(不必考虑”_")求各积水处的面积:需要使用结构体(beginx,area),在遇到"/"时,更新栈中原来元素(原来的水坑太小)或压入新元素(遇到新水坑),具体解法键...原创 2019-02-02 17:04:38 · 441 阅读 · 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 · 824 阅读 · 0 评论 -
挑战程序设计(算法和数据结构)—DFS和BFS及其一些应用
DFS题目12.3链接Depth First SearchDFS可以使用递归和栈来解。以下两种方法都是将邻接表转化为邻接矩阵,在图的邻接矩阵上操作。使用递归:#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 · 345 阅读 · 0 评论