- 博客(34)
- 收藏
- 关注
转载 【经典句子】
1.Done is better than perfect.比完美更重要的是完成。2.Code wins arguments.代码赢得争论。3.Move fast and break things.快速行动,破除陈规。4.Stay focused and keep shipping.保持
2014-04-30 10:59:40 683
原创 【分块查找】
秘诀:先分块,再匹配。分而治之 步骤:1.先取各块中的最大关键字构成一个索引表。2.查找分为两部分,先对索引表进行二分查找或是顺序查找,以确定待查记录在哪一块中。3.然后,在已经确定的块中用顺序法进行查找。 #includestruct indexBlock{ //定义块的结构 int key; int start;
2014-04-24 09:11:14 1018
原创 7.6 最短路径—Dijkstra算法和Floyd算法
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html
2014-04-22 11:29:24 799
转载 编辑文章 - 博客频道 - CSDN.NET
1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu;于是在声明变量的时候就可:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明这里的Stu实际上
2014-04-21 16:38:59 596
原创 【typedef struct 和 struct 区别】
1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu;于是在声明变量的时候就可:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明这里的Stu实际上就是struct Stu
2014-04-21 16:38:31 619
原创 【define宏定义和const常量定义之间的区别】
define部分:宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段。(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议。)宏的语法为:#define 宏名称 宏值注意,宏定义不是C或C++严格意义上的语句,所以其行末不用加分号结束。作为一种建议和一种广大程序员共同的习惯,宏名称经常使用全部大写的字母。利用宏的优点:1)让代码更简洁明了当然
2014-04-21 16:31:06 1219
原创 【前/中/后缀表达式的转换 】
前/中/后缀表达式的转换 自然表达式转换为前/中/后缀表达式,其实是很简单的。首先将自然表达式按照优先级顺序,构造出与表达式相对应的二叉树,然后对二叉树进行前/中/后缀遍历,即得到前/中/后缀表达式。 举例说明将自然表达式转换成二叉树: a×(b+c)-d ① 根据表达式的优先级顺序,首先计算
2014-04-21 16:15:49 835 1
原创 中序后序先序
/*要想由这三种遍历二叉树的序列重建唯一的二叉树则至少得有两种遍历序列,且这两种中一定要有中序序列,也就是先序+中序-->二叉树 或者 后序+中序-->二叉树,而先序+中序得不到唯一的二叉树。*/#include #include #include //二叉链表typedef struct node{ char data;//节点数据元素 struct node *lchil
2014-04-18 16:16:36 560
原创 【NYOJ 202 树的中序遍历】
http://acm.nyist.net/JudgeOnline/problem.php?pid=202直接输出中序,因为左旋右旋后中序并不改变!!! 开始以为要建树,后来发现不用啊!因为那个输入就是树了,都把每个节点的左孩子右孩子给出来了,那就直接中序遍历之。
2014-04-18 15:39:14 587
原创 【NYOJ 38 K r u s k a l】
题目链接/*问题描述:给定一个图求最小生成树思路: K r u s k a l算法每次选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。注意到所选取的边若产生环路则不可能形成一棵生成树。K r u s k a l算法分e 步,其中e 是网络中边的数目。按耗费递增的顺序来考虑这e 条边,每次考虑一条边。当考虑某条边时,若将
2014-04-16 08:55:12 716
原创 【三个水杯 NYOJ 21 广搜】
唉...这道题写了好久啊!简单的宽度优先搜索,三个水杯之间的相互倒水如下图6种情况:对于每一次倒水都会引起三个水杯水量状态的改变,这样就可以得到如下的一个解空间树:按照上图中得到解空间树的方法,代码如下:#include #include #include using namespace std;#define EMPTY
2014-04-15 21:37:29 576
原创 【POJ 1321 逐行深搜】
解题思路:DFS,没想法就很难很难,有想法就很容易的题棋盘规则与否不是难点,无论规则不规则都可以用标记去解决难点在于 棋盘的行数(列数)n 与 待摆放的棋子总数k 的关系为k K==n时还是比较好办的K 网上普遍做法都是 逐行深搜,效率不错,我也稍微借鉴了,
2014-04-15 20:08:46 587
原创 【NYOJ 121】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=121#include#includeusing namespace std;char a[15],b[15];int main(){ int test,sum; scanf("%d",&test); while(test--){
2014-04-15 17:41:56 511
原创 【NYOJ 127 】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=127#includeusing namespace std;int fun(int m){ int sum=1; for(int i=1;i<=m-2;i++){ sum=(sum*m)%10003; } return sum;}
2014-04-15 17:27:07 518
原创 【POJ 1012 模拟】
题目链接:http://poj.org/problem?id=1012我们从点1开始编号,则初始情况一共有2*k个点假设b为已经杀掉的人数,now为现在的起始位置,next为下一个杀掉人的编号,初始时,b=now=0 则第一步,next=(0+m-1)%(2k-0)+1,(减1取模后再加1,为了防止0的出现),编号为next的人被杀掉,注意,此时的now不是ne
2014-04-14 20:27:47 614
原创 【NYOJ 284 BFS+优先队列】
题目背景很有趣,是大家小时候经常玩的坦克大战,哈哈。弱弱地表示本人小时候经常玩游戏机。此题是在迷宫问题的基础上做了些改动,就是地图上能走的点可能耗费时间1,也可能耗费时间2。那么,元素在出队列时,不能简单的按照以前的入队顺序出队了,而应该让时间最短的先出队,这样就能够保证先入队的点一定是时间最短的,那么搜到终点时也时间也一定最小。现在回头想下,迷宫问题之所以没有考虑
2014-04-14 19:10:18 580
原创 优先队列priority_queue 用法详解
优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。例如:我们常用的操作就是对数据排序,优先队列默认的是数据大的优先级高所以我们无论按照什么顺序push一堆数,最终在队列里总是top出最大的元素。用法:示例:将元素5,3,2,4,6依次p
2014-04-14 19:07:08 505
原创 图的遍历
图的遍历 图的遍历有两种遍历方式:深度优先遍历(depth-first search)和广度优先遍历(breadth-first search)。1.深度优先遍历 基本思想:首先从图中某个顶点v0出发,访问此顶点,然后依次从v0相邻的顶点出发深度优先遍历,直至图中所有与v0路径相通的顶点都被访问了;若此时尚有顶点未被访问,则从中选一个顶点作为起始点,重复上述过
2014-04-11 20:10:37 493
原创 【最短路径之Dijkstra算法详细讲解 】
1 最短路径算法在日常生活中,我们如果需要常常往返A地区和B地区之间,我们最希望知道的可能是从A地区到B地区间的众多路径中,那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:(1)确定起点的最短路径问题:即已知起始结点,求最短路径的问题。(2)确定终点的最短路径问题:与确定起点
2014-04-09 20:38:21 996
原创 拓扑排序
拓 扑 排 序 一个较大的工程往往被划分成许多子工程,我们把这些子工程称作活动(activity)。在整个工程中,有些子工程(活动)必须在其它有关子工程完成之后才能开始,也就是说,一个子工程的开始是以它的所有前序子工程的结束为先决条件的,但有些子工程没有先决条件,可以安排在任何时间开始。为了形象地反映出整个工程中各个子工程(活动)之间的先后关系,可用一个有向图来表示,图中的顶点代表活
2014-04-08 20:42:30 511
原创 [NYOJ 44 子串和 动态]
http://acm.nyist.net/JudgeOnline/problem.php?pid=44#include#include#includeusing namespace std;#define MAXN 1000005int dp[MAXN],a[MAXN];int main(){ int ncase,n; scanf("%d",&ncase);
2014-04-04 20:56:32 513
转载 【Prim 算法】
前几天研究Kruskal算法,直接上手就是并查集优化,朴素算法压根就没写。这两天看Prim算法也想略过朴素版O(n^2)直接用二叉堆优化,可是发现不看朴素算法根本写不出来...囧,看来还是不能忽略基础...草稿纸上画图模拟推演了半天,终于搞清楚Prim算法朴素版的C语言实现,拿出那天学Kruskal的小题目测试了一下,通过。代码的注释我写得很详细,方便理解,有几点需要说明一下。
2014-04-04 20:10:28 546
转载 【Kruskal 算法】
Kruskal比较适用于稀疏图,是一种贪心算法:为使生成树上边的权值和最小,则应使生成树中每一条边的权值尽可能地小。具体做法:找出森林中连接任意两棵树的所有边中,具有最小权值的边,如果将它加入生成树中不产生回路,则它就是生成树中的一条边。这里的关键就是如何判断"将它加入生成树中不产生回路"。《算法导论》提供的一种方法是采用一种"不相交集合数据结构",也就是并查集了。具体的实现看代码
2014-04-04 20:07:25 643
原创 【并查集】
并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。使用并查集时,首先会存在一组不相交的动态集合 S={S1,S2,⋯,Sk},一般都会使用一个整数表示集合中的一个元素。每个集合可能
2014-04-03 21:43:51 614
原创 【POJ 1611 并查集】
http://poj.org/problem?id=1611#include#includeusing namespace std;#define MAXN 30005int pa[MAXN],ran[MAXN];int find_set(int x){ if(x==pa[x]) return x; else return pa[x]
2014-04-03 21:32:33 492
原创 46
#include#include#includeusing namespace std;#define MAXN 0x7fffffffint a[505];int graph[505][505];int lowcost[505];int visited[505];int v;int prim(){ int sum=0; memset(visited,0,si
2014-04-03 21:15:50 460
原创 【214最长单调递增子序列 NYOJ 二分搜索 和动态】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2141. 算法复杂度是O(N*N)f[i]是以a[i]为最大值的子序列,那么f[]的最大值就是要的结果。int f[],a[];f[0] = 1;for(i = 1 ; i { f[i] = 1; for(j = 0
2014-04-02 21:32:45 529
原创 【矩形嵌套 16 动态规划 NYOJ】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=16#include#include#includeusing namespace std;struct point{ int a,b;}m[1005];int dp[1005];int cmp(point x,point y){ if(x.a==
2014-04-01 20:55:43 490
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人