算法
数学王大爷
这个作者很懒,什么都没留下…
展开
-
第十一届蓝桥杯大赛软件类省赛:试题J:网络分析
第十一届蓝桥杯大赛软件类省赛:试题J:网络分析原题:利用并查集把相互连接的节点并入同一集合,因为并查集中实现了树的压缩,所以循环遍历查找在同一集合中节点的操作复杂度比较低。#include <iostream>using namespace std;int arr[100001]; //记录集合信息int num[100001] = { 0 }; //记录储存信息大小int myfind(int i) { //实现查找祖先节点并缩短树高,使其子代节点向父节点集中原创 2020-09-29 17:28:28 · 610 阅读 · 0 评论 -
并查集代码详解附ptaL2-024部落
并查集并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。数组实现集合操作初始化数组为-1,对于数值,如果为负值表示为祖先节点,负值越小表示此集合节点越多,从而方便并集操作,实现高度压缩,正值为父节点关键代码:int myfind(int i) { //实现查找祖先节点并缩短树高,使其子代节点向父节点集中 if (arr[i] < 0) //数组的初始化是祖先为自身,即节点值为下标 return i; //祖先为自身即返回 r原创 2020-05-25 13:09:49 · 316 阅读 · 0 评论 -
快速幂代码详解
快速幂将幂指数拆分成二的幂次相加的形式,从而各各相邻幂次之间存在平方关系,再累加得出结果关键代码//快速幂 O(logN)//求a的b次幂//将b拆成2的幂相乘,每个2的幂之间有乘积关系long long FastPower(int a, int b) { long long base = a; //b二进制位对应的幂值 long long solve = 1; //累计结果值 while (b != 0) { //由于不断右移最后b会为0 if (b & 1) { /原创 2020-05-21 22:16:29 · 436 阅读 · 0 评论 -
Floyd(弗洛伊德)算法代码详解
Floyd是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法关键代码vector<vector<int>> Floyd(vector<vector<int>> matrix) { vector<vector<int>> m = matrix; //matrix是邻接矩阵,m为matrix的复制 vector<vector<int>> s(matrix.size(),vector&l原创 2020-05-21 22:07:02 · 1501 阅读 · 0 评论 -
Dijkstra(迪杰斯特拉)算法代码详解
Dijkstra是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。权值为非负,贪心策略。关键代码vector<int> Dijkstra(vector<vector<int>> matrix,int s) { //matrix邻接矩阵,s源点 int n = matrix.size(); //节点总数 vector<int> dis(n,INF); //distance记录最短路径长度,初始值无穷大(自定义常量) vec原创 2020-05-21 21:55:09 · 1259 阅读 · 0 评论