数据结构与算法
基础基础
哞哞哞咩咩咩
记录日常学习
展开
-
拓展欧几里得及应用
原理部分:拓展欧几里得算法详解关于欧几里得及其扩展算法(C语言实现,更新C++模板)代码部分:#include<stdio.h>int exgcd(int a, int b, int* x, int* y)//扩展欧几里得算法;{ if (b == 0) { *x = 1; *y = 0; return a; } int ret = exgcd(b, a % b, x, y); int t = *x; *x = *y; *y = t - a / b * (*原创 2020-06-29 15:07:33 · 164 阅读 · 0 评论 -
两种方法实现拓扑排序
本文转载自:https://blog.csdn.net/qq_35644234/article/details/605781891.拓扑排序的介绍对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。拓扑排序对应施工的流程图具有特别重要的作...转载 2020-04-11 11:22:36 · 797 阅读 · 0 评论 -
冒泡排序和快速排序优化方法
冒泡排序参考【排序】:冒泡排序以及三种优化//假设排序arr[] = { 1, 3, 4, 2, 6, 7, 8, 0 };void BubbleSort(int arr[],int len){ int i = 0; int tmp = 0; for (i = 0; i < len - 1; i++)//确定排序趟数 { int j = 0; for (j = 0;...原创 2020-04-07 20:15:48 · 159 阅读 · 0 评论 -
插入排序的3种实现方式(包含希尔排序)
插入排序的基本方法是:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止。顺序法定位插入位置——直接插入排序i表示当前要排序的元素,j是i的前面一个元素。1.复制插入的元素:temp = list[i];2.记录后移,查找插入的位置for (; j >= 0 && list[j] > temp; ...原创 2020-04-06 00:57:23 · 1245 阅读 · 1 评论 -
Dijkstra堆优化解析
Dijkstra堆优化用vector数组来存储每个节点的相邻节点#include<iostream>#include<queue>using namespace std;const int INF = 0x3f3f3f3f;const int MAXN = 1000010;/* 边尾=====>边头*/struct qnode { int v;/...原创 2020-04-03 17:08:02 · 366 阅读 · 0 评论 -
Floyd有向网最短路径解析
Floyd相比起Dijkstra,找任意两点最短距离更加方便。然而时间复杂度也会更高,为O(n3)O(n^3)O(n3)。下面用几张图描述算法实现具体过程首先是一张有向网初始化邻接矩阵A−1A_{-1}A−1,不直接相连的两点之间权值无穷大,顶点到自己权重0。初始化Path矩阵Path−1Path_{-1}Path−1,每个值为-1。-1代表两个点之间没有任何中间点。记住它是初始状...原创 2020-04-04 19:32:35 · 455 阅读 · 0 评论