![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
没想好叫什么名字
这个作者很懒,什么都没留下…
展开
-
栈与队列基本操作
想了下,上学期学的数据结构线性结构还有些混乱的地方,想做一点注意事项的总结。1.链表2.栈顺序栈:定义一个数组(可以是数组形式的data[ ]或指针形式的*data,若是指针形式就需要在结构体中加一个变量maxsize存放数组的最大容量)和栈顶指针(在顺序栈中就是数组下标),栈顶指针存放栈顶元素,初始化时栈顶为-1。下面给出顺序栈的算法。#include#in原创 2017-02-17 22:12:59 · 598 阅读 · 0 评论 -
最短路简化版(邻接矩阵和邻接表)
经历一周忙碌的工作后,蒜头君想趁着周末好好游玩一番。蒜头君想去好多好多地方,他想去南锣鼓巷吃各种好吃的,想去颐和园滑冰,还想去怀柔滑雪场滑雪……可是时间有限,蒜头君并不能玩遍所有的地方,最后他决定去几个离他较近的。我们知道蒜头君一共想去 NN 个地方玩耍,编号从 11 到 NN,并且知道了蒜头君所在地方的编号 CC,以及 MM 条路径。现在蒜头君想让你帮他算一算,他到每个地方分别需要经过多少个原创 2017-07-20 20:42:32 · 1076 阅读 · 0 评论 -
广义表和二叉树的转换
//广义表转二叉树:设置一个标记变量k,初始值为-1;设置一个标记结点p;循环遍历广义表的字符串str; 如果str[i]是左括号: 则设置k为0; 把p压入栈中。 否则如果str[i]是逗号: 则设置k为1。 否则如果str[i]是右括号: 则栈顶元素出栈。 否则如果str原创 2017-07-17 22:38:01 · 4752 阅读 · 0 评论 -
2的幂次方表示
b:2的幂次方表示查看提交统计提问总时间限制: 1000ms 内存限制: 65536kB描述任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为: 2(7)+2(3)+2(0)进一步:7=22+2+20(21用2原创 2017-07-23 20:49:01 · 387 阅读 · 0 评论 -
FloodFill 算法
输入数据会构成一个无向图,包含图的顶点个数和边数。你需要输出经过 FloodFill 算法染色后的节点,要求将每个节点按染色结果分类。其中,和之前学习的一样,输入的节点从编号为 00 开始,染色的结果由 11 开始递增。输入格式输入的第一行为两个整数 nn 和 mm(1 \leq n,m \leq 1001≤n,m≤100),分别表示图中顶点个数和边数。接下来共有 mm 行,格式为原创 2018-01-07 22:03:01 · 389 阅读 · 0 评论 -
送分啦-QAQ(斐波那契博弈)
斐波那契博弈有一堆个数为n的石子,游戏双方轮流取石子,满足:1)先手不能在第一次把所有的石子取完;2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。约定取走最后一个石子的人为赢家,求必败态。这个和之前的Wythoff’s Game 和取石子游戏 有一个很大的不同点,就是游戏规则的动态化。之前的规则中,每次可以取的石子的策略集合是基本固定的,但是这次有规...原创 2018-02-26 23:39:13 · 296 阅读 · 0 评论 -
模拟退火算法
模拟退火算法原理爬山法是一种贪婪的方法,对于一个优化问题,其大致图像(图像地址)如下图所示: 其目标是要找到函数的最大值,若初始化时,初始点的位置在C处,则会寻找到附近的局部最大值A点处,由于A点出是一个局部最大值点,故对于爬山法来讲,该算法无法跳出局部最大值点。若初始点选择在D处,根据爬山法,则会找到全部最大值点B。这一点也说明了这样基于贪婪的爬山法是否能够取得全局最优解与原创 2018-02-07 16:57:27 · 402 阅读 · 0 评论 -
加减乘
请对于下面式子进行填空,填入加减乘,使这个表达式成立。1 2 3 4 5 6 7 8 9 10 == 0请输出一共有多少种方案可以使得表达式成立。用dfs,也可以用栈。#include<iostream>using namespace std;int f[11]={0,1,2,3,4,5,6,7,8,9,10};int a_b(int a,char c,int ...原创 2018-02-27 13:46:59 · 572 阅读 · 0 评论 -
状态压缩dp(铺瓷砖问题)
今天蒜头君装修新家,给家里买了一种 1 \times 21×2的长方形(如图1)新瓷砖。蒜头君是个懂得审美的人,毕竟人生除了金钱,还有诗和远方。这个时候蒜头君就在想,这种长方形的瓷砖铺到一个 10 \times 1010×10 的地面上有多少种方案?(如图2:是 4 \times 44×4 地面的一种方案)图1:图2:#include <iostream> #include <...原创 2018-02-27 15:26:47 · 1808 阅读 · 1 评论 -
各种排序算法的实现
1.冒泡排序class BubbleSort {public: int* bubbleSort(int* A, int n) { // write code here for(int i=0;i<n-1;i++) { for(int j=0;j<n-i-1;j++) {原创 2017-07-02 17:03:12 · 210 阅读 · 0 评论 -
一步一步理解线段树
一 概述线段树,类似区间树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(logn)。线段树的每个节点表示一个区间,子节点则分别表示父节点的左右半区间,例如父亲的区间是[a,b],那么(c=(a+b)/2)左儿子的区间是[a,c],右儿子的区间是[c+1,b]。二 从一个例子理解转载 2017-06-21 08:43:30 · 339 阅读 · 0 评论 -
Bone Collector II
Bone Collector IITime Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4835 Accepted Submission(s): 2519Problem DescriptionThe title of原创 2017-06-20 16:15:39 · 191 阅读 · 0 评论 -
链表的输入输出及逆转
对于链表,输入输出以及逆转是比较常见的,输入输出时可以根据自己的需要调整,我这写的c程序是输入一个链表的长度,然后输入链表各节点数据,最后输出顺序的数据以及逆序的数据。给了三个函数,分别是输入输出以及逆转的程序。先给出一个输入输出函数:#include#includetypedef struct node * List;struct node{ int data; List n原创 2017-02-20 18:35:51 · 867 阅读 · 0 评论 -
八皇后问题(递归实现)
八皇后问题,是一个古老而著名的问题,是回溯的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 这里用递归算法实现,因为递归在某个层面上就实现了回溯,再算法中,构造8x8的数组,初始全部为0,一行一行的进行判断,当某一行没有危险,递归调用该函数。下面给出代码。原创 2017-02-20 20:48:04 · 448 阅读 · 0 评论 -
BFS算法(详细C)
最近学了图的广度和深度优先遍历,但是广度比深度要麻烦一些,用到了队列,我就完全的按自己的思路写了一段很长的代码,看了一些大神写的,但其实可以比较简单,其实图也有多种表示方式,所以各个代码会有不同,下面给出我的程序。#include#include#define maxn 100#define maxsize 100typedef struct qnode * Queue;typede原创 2017-02-24 09:43:35 · 20021 阅读 · 2 评论 -
5-19 求链式线性表的倒数第K项
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。输入格式:输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。输出格式:输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。输入样例:4 1 2 3 4 5 6 7 8 9 0 -1原创 2017-02-26 09:45:54 · 1754 阅读 · 0 评论 -
结果填空:方格选数(DFS)
有一个 5 \times 55×5 的如下矩阵:3344557766662288441212771212448833119955101077885566原创 2017-03-19 09:41:38 · 619 阅读 · 0 评论 -
P1025 数的划分(洛谷)DFS或者DP
题目描述将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的。1,1,5; 1,5,1; 5,1,1;问有多少种不同的分法。输入输出格式输入格式:n,k (6输出格式:一个整数,即不同的分法。输入输出样例输入样例#1:原创 2017-03-14 15:04:52 · 691 阅读 · 0 评论 -
前序,中序,后续非递归遍历
1.先序遍历非递归算法#define maxsize 100typedef struct{ Bitree Elem[maxsize]; int top;}SqStack;void PreOrderUnrec(Bitree t){ SqStack s; StackInit(s); p=t; while (p!=null || !S转载 2017-05-09 21:55:44 · 243 阅读 · 0 评论 -
算法中的数学思想
最近接触了一些数学思想,感觉特别好用,在时间复杂度还有代码的简洁性方面都有很大的帮助。 不多说,给出我的一些代码。1.最大公约数gcd(a,b)为最大公约数,一般用辗转相除法。相应的最小公倍数lcd(a,b)=a*b/gcd(a,b),用欧几里得算法加上递归,会使代码变的简洁。int gcd(int x,int y){ if(y==0) return x; e原创 2017-03-28 23:17:57 · 580 阅读 · 0 评论 -
将n划分成最大数不超过m的划分数
之前写过类似的文章,今天看到另外一种划分数的方法,也就是将n划分成不大于m的种数。若是划分多个整数可以存在相同的:dp[n][m]= dp[n][m-1]+ dp[n-m][m] dp[n][m]表示整数 n 的划分中,每个数不大于 m 的划分数。 则划分数可以分为两种情况: a.划分中每个数都小于 m,相当于每个数不大于 m- 1, 故划分数为 dp[n][m-1]. b.划分中有一个数为 m....原创 2018-03-27 21:38:51 · 1302 阅读 · 0 评论