![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
Hush..
明光以北,蓟门以南
展开
-
最小生成树的一种解法(并查集)
/*使用 并查集 的Kruskal算法*/struct edge//为方便排序,用结构体来存储边的关系{ int u, v, w;//起点,终点,距离};struct edge e[10];//比m大1即可int n, m;int f[7] = { 0 }, sum = 0, count = 0;//并查集所用变量,f数组比n大1即可void quicksort(int l...原创 2019-02-14 22:48:19 · 223 阅读 · 0 评论 -
堆排序
一、快速建立堆的方法 1.方法: 建立一长度为n的数组,从n/2开始扫描到1,用向下调整函数,即可快速建立堆。 2. 原理:n个元素建立一个堆,将n个结点以自顶向下,从左向右的方式从1-n编码,从而转化为完全二叉树,紧接着从最后一个非叶节点(n/2)开始到根节点(1),逐个扫描所以结点并向下调整。 3. 代码for (int i = n / 2; i >= 1...原创 2019-02-14 13:29:34 · 141 阅读 · 0 评论 -
C++位运算
一、逻辑运算符 &(与) ^(异或) |(或) ~(取反)1、&的用法 通常用于二进制取位操作,例如一个数 &1 的结果就是取二进制的最末位; 这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数是偶数,最末位为1表示该数为奇数。例:if(a&1) a++; else a-...原创 2019-02-19 17:57:03 · 1358 阅读 · 0 评论 -
链表和模拟链表
链表#include<bits/stdc++.h>using namespace std;/*用链表实现插入一个数到已排序的数组中*/struct node//该结构体用来表示链表的结点类型{ int data;//需要维护的数据 struct node *next;//下一个结点也为该结构};int main(){ struct node *head, ...原创 2019-02-13 17:10:09 · 240 阅读 · 0 评论 -
最短路径常用算法
/*Floyd算法求最短路径,图中不能带有“负权回路” */for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (Map[i][j] > Map[i][k] + Map[k][j]) ...原创 2019-02-13 16:20:28 · 845 阅读 · 0 评论 -
图的广度优先遍历
/*bfs适用于所有边的权值相同的情况*/#include<bits/stdc++.h>using namespace std;int n, m, start, End, a, b, Map[51][51], book[51];struct note{ int x;//当前所在城市 int s;//计数};int main(){ struct note q[25...原创 2019-02-13 11:19:27 · 153 阅读 · 0 评论 -
图的深度优先遍历
#include<bits/stdc++.h>using namespace std;int n, m, Map[10][10], book[10], a, b, c;int Min = 99999999;void dfs(int cur, int dis)//cur为当前城市,dis为所走路程{ if (dis > Min) return; if (cur ...原创 2019-02-12 15:43:34 · 135 阅读 · 0 评论 -
BFS和DFS模板
/*BFS模板*//*maxn行maxn列的迷宫*/#include<bits/stdc++.h>using namespace std;#define maxn 100int a[maxn][maxn];//存迷宫bool book[maxn][maxn];//访问标记int dir[4][2] = { 0,1,1,0,0,-1,-1,0 };//四方向的方向向量...原创 2019-02-12 13:02:55 · 370 阅读 · 0 评论 -
快排模板
快速排序选择“基准数”时,若选取左右两端的数,在数组是有序的情况下,时间复杂度会退化为O(N^2),和冒泡排序一样了。所以,选取基准数时,可选取中间的数,避免这种情况。void quicksort(int left, int right)//快排实质:基准数归位{ int i, j, temp, t; temp = a[(left+right)/2];//基准数 i = lef...原创 2019-02-15 13:27:35 · 176 阅读 · 0 评论 -
并查集
int getf(int v)//找爹递归函数 { if (f[v] == v) return v; else return getf(f[v]); } void merge(int v, int u)//合并两子集合的函数 { int t1, t2; t1 = getf(v); t2 = getf(u); if (t1 != t2)//判断两结点是否在...原创 2019-02-14 15:08:43 · 91 阅读 · 0 评论