数据结构
摆渡客
记录
展开
-
最短路径dijkstra算法与Floyd算法
最短路径的题遇见的也不少了就是没有总结过,毕竟做的很烂,但每次都记不住,于是我写一个模板。第一个是dijkstra算法 分析: dijkstra算法与之前的最小生成树的prim算法真的神似,起先都是搜索最小边,然后在更新与初始点距离的数组。 代码:#include<iostream>using namespace std;const int INF = 0x3f3f3...原创 2018-04-14 22:46:05 · 711 阅读 · 0 评论 -
7-42 和为T (10 分)
从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T。每个元素限选一次,不能一个都不选。输入格式: 第一行一个正整数n,表示整数集内元素的个数。第二行n个整数,用空格隔开。第三行一个整数T,表示要达到的和。输出格式: 输出有若干行,每行输出一组解,即所选取的数字,按照输入中的顺序排列。若有多组解,优先输出不包含第n个整数的;若都包含或都不包含,优先输出不包含第n-1个...原创 2019-03-04 15:08:41 · 629 阅读 · 0 评论 -
二叉树的遍历(含统一格式遍历)
//非递归前序遍历void preorderTraversal(TreeNode *root, vector<int> &path){ stack<TreeNode *> s; TreeNode *p = root; while(p != NULL || !s.empty()) { while(p != NULL)...转载 2018-05-20 21:25:25 · 470 阅读 · 0 评论 -
排序第四篇--归并排序
不多说直接上代码,先来一份递归的,非递归后期补上 代码:#include<iostream>#include<time.h>using namespace std;void bing(int *a, int *b, int s, int e, int mid) {//并(治) int i = s, j = mid + 1; int m = m...原创 2018-04-21 22:35:53 · 176 阅读 · 0 评论 -
排序第三篇--堆排序
这个东西就一直没有记住过,看完就忘,话说谁没事写堆排啊(自己发牢骚),这里为了学习还是标记一下这个知识,堆排之前需要建堆,所以代码还是不少的,废话少说,直接上代码吧,虽然长但很好理解。#include"stdafx.h"#include<iostream>#include<time.h>using namespace std;typedef struct n...原创 2018-04-17 22:07:37 · 154 阅读 · 0 评论 -
并查集模板
之前重来没有重视过这个东西,后来才发现这东西是个很基础且很重要的东西,这里记录下按秩合并的路径压缩并查集,话说这种事比较好用的。分析就不写了,代码很清晰易懂,我的另一篇文章中也有用到并查集,最小生成树和并查集有很深的联系。参考https://blog.csdn.net/qq_36459536/article/details/79893858#include<assert.h>cl...原创 2018-04-11 22:31:55 · 161 阅读 · 0 评论 -
排序第二篇--希尔排序
希尔排序,和插入排序就差一个希尔增量序列,希尔排序的成败也在这个序列上,貌似是找一个互质的序列最好,如果找的不是互质就会很有可能扫描一遍什么也没做,最后还不如插入的快,陈老师说希尔排序就相当于是插入排序的升级版,插入排序是相邻数的操作,而希尔排序是可以跳跃操作,这个的实现就和增量序列有关了。 代码:void shell_sort() { int d, i, j; for ...原创 2018-04-16 22:39:03 · 200 阅读 · 0 评论 -
约瑟夫环
因为之前的一个用数组模拟链表的方法丢失了,更重要的是我想不起来怎么写了,尝试了一下午都没能达到我想要的那种效果,真的是人老了,现在我学到另一种解法是用用stl来做,用的是queue的特性,确实是简便了不少,对那些用链表写的人来说这是。#include#include#include#includeusing namespace std;int main(void) { i原创 2018-01-23 17:22:49 · 157 阅读 · 0 评论 -
二叉树的数组实现
书上大多是结构体+指针实现的,但在好多情况下数组的实现情况更多一些,于是我自己就想了一个用数组实现的二叉树,以及他的dfs和bfs。 其中有的代码我没实现,只是有个轮廓。 创建还是用的递归,在输出时,第一次注释的地方用的i*2和i*2+1,并用递归实现循环,但不能控制结束,应该加一个m标识输出数。第一个分割线的部分我用的就是直接输出数组,第二个分割线的部分我用的中序遍历。代码还有不成熟的部分,就原创 2017-10-15 10:07:02 · 1635 阅读 · 0 评论 -
构建二叉树及遍历
第一个是中序后序构造二叉树,并先序遍历,特点在后序中每一个末端值都是节点,以此在先序中查找并以此点分割左右子树,递归一下… 第二个是先序中序构造二叉树,并后序和层次遍历,特点是以先序为参照在中序查找,层次遍历最好还是使用队列吼啊….代码并不能直接用,我把两个问题搓在一起了。。。#include<iostream>#include<string.h>#include<queue>using n原创 2017-10-15 22:05:29 · 236 阅读 · 0 评论 -
最小生成树prim算法与kruskal算法
最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。 分析:从一个初始点开始,每次获取与该点直连的点,并与之前获取的可连接的边比较,得到最小边,然后将连接的点并入集合(以后的点不能在包括他,要不然会形成回路),直到遍历完所有顶点纠结束。 代码:#include&amp;lt;iostream&amp;gt;const int INF = 10000;using na...原创 2018-04-11 11:28:37 · 382 阅读 · 0 评论 -
排序第一篇--简单排序之冒泡与插入
自打我用了标准库后就再也没怎么看过排序的东西了,但是现在又因为专业课的要求所以又重新拾起来这些东西了,这是这个排序系列的第一篇,简单的代码不做解释,因为真的很简单; ps:冒泡可能与他们写的不一样,因为我也忘了怎么写了,就写了一个自己版本的,或许你们也见过其他人这么写,或许认为有瑕疵,如果有错误一定要给我指正啊。 代码:const int MAX = 1000;int arr[MAX];...原创 2018-04-15 22:45:31 · 158 阅读 · 0 评论 -
prim算法与dijkstra算法在更新上的区别
prime: visit[index] = true;//最短边对应的另一个点纳入集合 cout << index << " "; sum += minor;//最小树的总距离长度 for (int j = 0; j < N; j++){ if (!visit[j] && di...原创 2018-04-15 16:16:57 · 508 阅读 · 0 评论 -
关于二叉树的建树
大致也就分两种,其中一种是静态建树,静态建树里面,可以是给每个点的子节点,也可以是给每个点的父节点,那种给先序/后续与中序来建树的就不说了,之说一下给出每个点父或子节点的情况。1)只给出每个点的子节点:8 1 -, - -, 0 -, 2 7, - -, - -, 5 -, 4 6'-'表示无子节点; struct node{ int l,r;};node arr[100];...原创 2019-03-15 10:49:48 · 1071 阅读 · 0 评论