
基础理解
Lawliet_ZMZ
ACMERandNODER
展开
-
递归的运行机制简单理解
C语言递归算法是怎么执行的#include void net(int);int main(){ net(1); return 0;}void net(int n){ printf("数字%d:n的地址是:%p\n", n, &n); if(n<4) { net(n+1); printf("数原创 2016-07-22 22:42:13 · 1075 阅读 · 0 评论 -
python 快排+动态交换优化
正常的代码,比较直观的:a = list([4,2,1,7,4,9,6,5,0,3,8]);print(a)def quicksort(left,right) : if left>right: return # 当i变为left值,第一次结束递归的条件是在左边的,当只有一个数后,递归的left传入本身, # right传入i-1,此时left是等于right的原创 2017-12-28 22:44:29 · 382 阅读 · 0 评论 -
扩展欧几里得算法详解
一:欧几里得算法(辗转相除法) 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a原创 2017-09-04 21:02:22 · 1298 阅读 · 0 评论 -
再谈Dijkstra算法和堆优化
用邻接矩阵的Dijkstra算法的代码:int mp[maxn][maxn];int dis[maxn];bool visit[maxn];int n,m; //V,E void Dijkstra( int s ) { int i,v,u; for( i=1; i<=n; ++i ) {原创 2017-05-19 10:47:10 · 18765 阅读 · 6 评论 -
C++之pair
转载自:http://www.cnblogs.com/archimedes/p/cpp-pair.htmlhttp://www.cnblogs.com/Nimeux/archive/2010/10/05/1844191.htmlstd::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。例如std::pair 或者 std::pair等。pair实质上是转载 2017-02-10 17:11:41 · 373 阅读 · 0 评论 -
不引入第三变量交换两变量值的四种方法
不引入第三变量来交换变量值,其中最常用的就应该是位运算了:int a=10=1010,int b=12=1100,a=a^b;//1010^1100=0110b=a^b;//0110^1100=1010a=a^b;//0110^1010=1100;此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变,类似牌的的翻转,其实把a^b看做了一个原创 2016-12-14 10:29:26 · 3602 阅读 · 0 评论 -
涨姿势stl map['a']['a']=b;
#include "iostream"#include "stdlib.h"#include using namespace std;int main(){// map, char>mp;// mp[{'a','a'}]='a;// cout<<mp[{'a','a'}];// mp[make_pair('a','a')]='a';//原创 2016-10-10 22:53:23 · 544 阅读 · 0 评论 -
找割点和割边
#include #include using namespace std;int n,m,e[9][9],root;int num[9],low[9],flag[9],index;void dfs(int cur,int father){ int child= 0,i; index++; num[cur]=index; low[cur]=index原创 2016-08-14 00:14:34 · 1897 阅读 · 0 评论 -
用数组模拟邻接表
用图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。4 5 1 4 9 4 3 8 1 2 5 2 4 6 1 3 7 第一行两个整数n m。n表示顶点个数(顶点编号为1~n),m表示边的条数。接下来m行表示,每行有3个数x y z,表示顶点x到原创 2016-08-08 20:58:51 · 6731 阅读 · 12 评论 -
优先队列
优先队列:顾名思义,首先它是一个队列,但是它强调了“优先”二字,所以,已经不能算是一般意义上的队列了,它的“优先”意指取队首元素时,有一定的选择性,即根据元素的属性选择某一项值最优的出队~百度百科上这样描述的: 优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素 优先队列的类定义 优先队列是0个或多个元素的集合,每个元素都有一个优先权或转载 2016-08-08 15:28:43 · 748 阅读 · 0 评论 -
POJ 2421 有一条连通下的最小生成树
Constructing RoadsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 22440 Accepted: 9588DescriptionThere are N villages, which are numbered from 1 to N, and原创 2016-08-02 17:10:22 · 605 阅读 · 0 评论 -
解救人质 DFS简单模板
解救人质,给一张二维地图,有障碍的点不能移动,给定起始点和人质坐标,求到达人质路程的最短路程,DFS模型#include #include using namespace std;int n,m,p,q,Min=99999999;int a[51][51],book[51][51];void dfs(int x,int y,int step){ int next[4][2]原创 2016-07-29 20:52:37 · 838 阅读 · 0 评论 -
解救人质 BFS模板(迷宫问题)
和上个DFS的问题一样,这次用BFS的思想,BFS没有像DFS那样专门有个step累加,是靠队列思想实现,更像一群路径竞速,最快的到达后,就break输出了#include struct node{ int x; int y; int f;//父亲在队列中的编号,本题不要求输出路径,可以不需要f int s;//步数};int main(){原创 2016-07-30 09:45:32 · 999 阅读 · 0 评论 -
二分图最大匹配模板
#include #include using namespace std;int e[101][101];int match[101];int book[101];int n,m;int dfs(int u){ int i; for(i=1;i<=n;i++) { if(book[i]==0&&e[u][i]==1) {原创 2016-08-15 15:31:54 · 1818 阅读 · 0 评论 -
啊哈算法_全排列
#include #include using namespace std;int a[10],book[10],n;void dfs(int step) //step表示站在第几个盒子面前{ int i; if(step==n+1) { for(i=1;i<=n;i++) cout<<a[i]; cout原创 2016-07-29 16:01:59 · 1671 阅读 · 0 评论 -
SPFA的队列优化模板
#include&lt;iostream&gt;#include&lt;algorithm&gt;#include&lt;cstring&gt;#include&lt;string&gt;#include&lt;set&gt;#include&lt;queue&gt;using namespace std;原创 2018-04-16 15:15:10 · 322 阅读 · 0 评论