![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
awhuter
学习;分享;进步
展开
-
单源最短路径Dijkstra算法,和多源最短路径Floyd算法, C++代码
是不是有向图都行,区别只在于邻接矩阵是不是对称矩阵,对算法没有任何影响边的权重不能为负数目录单源最短路径**Dijkstra算法**多源最短路径**Floyd算法****例子:**单源最短路径Dijkstra算法可以求得单个节点src到所有节点的最短路按照非递减的顺序找出各个节点的最短路/**维护直到flag全部为true * flag :是否已经找到最短路, 初始化全部false * dist :目前的最短距离 ,初始化全部正无穷INT32_MAX * path :最短路径的上一个节.原创 2022-05-16 13:37:57 · 338 阅读 · 0 评论 -
深度优先搜索DFS,广度优先搜索BFS, 遍历矩阵
深度优先搜索DFS,用递归,相当于先序遍历广度优先搜索BFS, 用队列, push进去的时候访问,标记#include <iostream>#include <vector>#include <queue>using namespace std;struct axis{ axis() : x(-1), y(-1) {} axis(int x_, int y_) : x(x_), y(y_) {} int x; int y;原创 2022-05-04 19:55:26 · 295 阅读 · 0 评论 -
C++STL中的最大堆,最小堆
堆,优先队列,头文件和队列是同一个#include<queue>#include<iostream>#include<queue>using namespace std;int main(){ //最大堆 queue<int> max_heap;//默认就是最大堆 queue<int,vector<int>,less<int>> max_heap1; //完整版 //最小堆 queue<int原创 2022-05-04 14:52:29 · 3360 阅读 · 0 评论 -
打印从1到n位最大的数(考虑大数)
考虑大数,已经不能用long long表示了,就要用字符串或数组表示了,下面用字符串表示#include <iostream>#include <string>using namespace std;//用string表示的十进制数字,加1,超出边界返回false,正常加1返回truebool plus1(string &str);//打印string数字,忽略前面的0void print1(string &str);int main(){原创 2022-04-29 18:10:29 · 205 阅读 · 0 评论 -
C++递归解决“汉诺塔”代码
递归解决汉诺塔问题用一个list记录操作#include <iostream>#include <list>#include <string>using namespace std;struct Operator{ Operator(int n_, string from_, string to_) : n(n_), origin(from_), destination(to_) {} //第n个 int n; string原创 2022-04-21 19:58:01 · 717 阅读 · 0 评论 -
查找算法:C++顺序查找、二分查找,代码、性能对比
顺序查找没有什么限制条件。二分查找条件:1、数据是有序的。2、能够随机访问,例如数组,链表就不行了下面程序对比了在一个有序数组中查找效率#include<iostream>#include<vector>#include<chrono>using namespace std;int main(){ const int N=100000; vector<int> VEC(N,0); //构造一个顺序数组 1-N原创 2022-04-17 16:06:08 · 1422 阅读 · 0 评论 -
排序算法:C++冒泡排序、选择排序、插入排序、希尔排序,快速排序,归并排序, 堆排序, 代码示例,效率对比
冒泡排序:每循环一次,对比前后两个数据,把大的挪到前面,所以循环一次最后一个是最大的元素,下次循环可以少循环一位vector<int> Bubble(vector<int> &vect){ int size = vect.size(); int N = size; int tem; for (int k = 0; k < size; k++) { N = size - k; // n,n-1,...,2,1原创 2022-04-16 16:51:46 · 881 阅读 · 0 评论 -
multiset,multimap只删除重复元素中的一个
multiset的头文件和set一个是#include<set>如果用erase(T& x),返回删除的个数,则会把和这个元素一样的全删掉,如果是erase(iterator),返回后一个迭代器,则只会删除一个,所以#include<iostream>#include<set>using namespace std;int main(){ multiset<char> SET{'a','b','c','d','a','b'}; //a原创 2022-04-15 14:08:16 · 5912 阅读 · 1 评论 -
反转单向链表,不新建链表,在原有基础上只改变指针方向
ListNode* reverseList(ListNode* head) { if(!head) return NULL; ListNode* p=head; //当前节点,开始的时候是NULL ListNode* pre=NULL; //前一个节点 ListNode* after=p->next; //后一个节点 while(p) { p->原创 2022-04-15 12:09:25 · 112 阅读 · 0 评论 -
根据前序遍历和中序遍历,构造一个二叉数,前序、中序、后序、层次遍历
#include <iostream>#include <unordered_map>#include <vector>using namespace std;//树节点struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solutio原创 2022-04-14 19:13:29 · 451 阅读 · 0 评论