算法及数据结构
个人在学习算法和数据结构过程中的总结
玩具玩具遥控车
脑袋空空
展开
-
算法模板整理
裴蜀定理:若 a,b 是整数,且 (a,b)=d,那么对于任意的整数 x,y, ax+by 都一定是 d 的倍数,特别地,一定存在整数 x,y,使 ax+by=d成立。解决方法:mid指针取(l+r+1)/2,小于等于这个数的解时左指针取mid,不再取mid+1,右指针取mid-1,循环条件为l<r,这样当跳出循环时l指向的数就是最小值。1.每一个集合用树来维护,每一个集合的编号是根节点,查找是去看他爸爸是不是根节点,不是再向上,所以每一个节点都要存储他的父节点,p[x]就是x的父节点。原创 2024-03-18 17:44:09 · 693 阅读 · 0 评论 -
使用sort函数排序结构体或类
我们假设需要对一个结构体进行排序,例如:struct candy{ int v; int w;} candies[110];需要对此结构体以v/w的大小进行排序;c++的STL库函数给我们提供了一个排序函数sort;但要使用sort函数进行排序,我们有以下两种方法。一 .重载比较运算符我们可以对比较运算符进行重载:struct candy{ int v; int w; bool operator<(const candy& c)...原创 2021-08-26 10:35:27 · 349 阅读 · 0 评论 -
POJ1724:寻路问题
该题是个图论使用邻接表存放图使用DFS搜索解决;但尤其注意需要剪枝#include<iostream>#include<vector>#include<cstring>#include<math.h>using namespace std;int K, N, R;struct Road { int d, L, t;};//使用邻接表存放图vector<vector<Road>> G(110); //一维原创 2021-07-16 15:44:03 · 88 阅读 · 0 评论 -
二分归并排序
时间复杂度为:o(nlogn)算法思想: 1.把前一半排序 2.把后一半排序 3.把两半归并到一个新的数组,然后拷贝回原数组源代码:void mergesort(int a[], int s, int e) { //分治 if (s < e) { int m = (s + e) / 2; mergesort(a, s, m); mergesort(a, m + 1, e); merge(a, s, e); }}void merge(int a[], int s原创 2021-06-23 17:40:04 · 70 阅读 · 0 评论 -
使用位运算方法简化POJ1222熄灯问题
1、问题分析题目给出一个5x6的01矩阵,0表示该位置的灯是熄灭的,1表示该处的灯是开着的,题目要求给出一种熄灯方案使得最后按下按钮后所有的灯都被熄灭。这里按下某处的按钮并不是只有该处的灯被熄灭或开启,而是如果它周围的灯(如果有的话)的状态都会反转(原来开着的灯熄灭,熄灭的灯开启)。具体的描述见原题。题目地址原题目2.问题求解此题可以直接采用枚举的方法,且直接枚举第一行情况即可,枚举第一行情况,下面行的情况就已经确定了,最后我们判断最后一行的灯是否全灭即可。3.使用位运算简化运算在其他博客中或许已原创 2021-06-07 19:58:09 · 112 阅读 · 0 评论 -
动态规划经典问题:01背包问题
问题重述:有N件物品和一个容量是 W的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个整数vi,wi,用空格隔开,分别表示第ii件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<N,V≤10000&...转载 2021-04-26 18:41:58 · 285 阅读 · 0 评论 -
如何不使用指针实现单链表
在数据结构中,链表的插入和删除要比数组方便许多,但通常我们接触到的单链表都是使用指针实现的单链表。 然而在算法竞赛中,指针很容易导致出错,所以下面我们来介绍一组非指针方法实现的单链表。我们知道,链表的原理即为:每一个子节点都存储了下一个节点的地址,所以我们使用数组实现链表时,可以使用两个数组:char s[] 此数组为存放数据的数组int next[] 此数组对应ch[]的下标,存储的是下一个节点的下标。这样,链表就通过另一个数组next[]相互串起来了。链表功...原创 2021-04-06 19:35:50 · 947 阅读 · 0 评论 -
使用二级指针创建无头单链表的方法
//数据类型struct date{ int year; int month; int day;};typedef struct gamemessage{ int ID; char name[20]; struct date issuingdate;}GM;//链表结点类型struct node { GM data; //链表节点存储的数据 struct node* pnext; ..原创 2021-03-11 20:08:37 · 202 阅读 · 0 评论