- 博客(36)
- 收藏
- 关注
原创 Dijkstra 单源最短路径
算法思想:辅助数组dis[i] 表示当前源顶点到i的最短路径。dis[i]在程序未结束前,类似于动态规划,可更新以取得最小值数组path用来记录路径首先初始化令dis[i]为Edge[v0][i],v0为源顶点,然后选择离源顶点最小的路径,加入到构造最短路径的点集合中,然后看是否可以更新dis[i]的值,依次循环n-1次,即可得打正解.测试代码:#inclu
2012-10-08 01:01:30
367
原创 C++ 中的stack与queue
内容来源:百度文库stack(栈)和queue(队列)也是在程序设计中经常会用到的数据容器,STL为我们提供了方便的stack(栈)的queue(队列)的实现。准确地说,STL中的stack和queue不同于vector、list等容器,而是对这些容器的重新包装。这里我们不去深入讨论STL的stack和queue的实现细节,而是来了解一些他们的基本使用。1、stackstack模板
2012-09-22 18:40:22
493
转载 归并排序
归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为:1)划分子表2)合并半子表 首先我们来讨论归并算法,归并算法将一系列数据放到一个向量中,索引范围为[first,last],这个序列由两个排好序的子表构成,以索引终点(mid)为分界线,以下面一个序列为例7,
2012-09-22 01:30:14
321
原创 插入排序
插入排序 数组a[a1,a2,a3.....an];排序的思路是利用a[j]与前面已经排好序的a[0]~a[j-1]进行重排序,找到一个关键位置插入即可。Code:#includeusing namespace std;void insert_sort(int a[],int n){ for(int j=1;j<n;++j) { i
2012-09-22 01:26:13
269
原创 NYOJ 214 单调递增子序列
题目信息:http://acm.nyist.net/JudgeOnline/problem.php?pid=214方法一。时间复杂度为O(n*n)经典动态规划,利用一个数组f[i]表示从a[i]开始的最大递增子序列的长度,然后max=max(f[i]) { i=1,2,3..n},在OJ上超时了,上网查了下,下面为大牛们的优化算法。方法二。时间复杂度为O(n*logn)由第
2012-09-20 20:56:39
641
原创 最大连续子段和
RT,求一数组中元素的最大连续子段和。方法一。 不考虑超时的影响,可以使用循环暴力解决,a[i][j]表示i是开头元素,j为结尾元素,需要使用三层循环,时间复杂度为0(n^3); #includeusing namespace std;int b[100][100];int main(){ int a[100]; int n,k; c
2012-09-20 20:22:52
5928
1
原创 简单的图邻接矩阵表示
#includeusing namespace std;#define MaxNode 30#define MaxEdge 40class Graph1{ private: int a[30]; //顶点表 int b[MaxNode][MaxNode]; //邻接矩阵
2012-09-17 20:41:45
663
原创 IO库的一些知识
标准io库类型和头文件iostream 对流进行读写fstream 对文件进行读写sstream 对string对象进行读写一.IO对象不可复制或赋值eg:ofstream out1,out2;out1=out2; // error : cannot assign stream objects//print functions:parameter is copied
2012-09-15 16:42:16
307
原创 为爱痴狂
Crazy for love, Yumei Chen, if in the future can get to your school study, I seriously pursue you, no matter what, dry dad, come on! The faith of love, I can do it!
2012-09-13 23:48:17
385
原创 const 引用
留下足迹,他日来详细解。今天看下Primer,发表下const限定符和指针及参数传递方面的见解。 一.指向Const对象的指针 常见定义 const int *p; //p is a referrence to conts int 指向const对象的指针与const指针是有明显区别的,const指针必须在定义时对其初始化,而前者则没有要求。指向const对象的指针
2012-09-04 23:39:34
444
原创 带有模版类的输入输出重载符
通常我们易犯这样的错误friend ostream& operator &OutList);但是这样在编译器会报错,这是为什么呢,因为上面这个函数它不是一个模版,它是一个简单的重载函数,所以要在后面加个 出处:http://topic.csdn.net/t/20050416/16/3941940.html
2012-09-01 10:50:12
362
原创 课程设计
课程设计之小型图书馆管理系统 这是大学里首个作业,以前闲暇时看过别人写过的,也有一些经验了,看来有点知识用不到不代表不重要。 题目就不说了,万变不离其宗,我采取的数组实现的,比较简单吧,用链表我没那信心,等学完数据结构在折腾吧。附上代码,待以后改进,#include #include //文件IO库,i 为in,o 为 out,即文件输入输出库。 #includ
2012-08-28 23:18:44
440
原创 NYOJ 14会场问题
思路:贪心主要问题是时间的问题,这就需要用到ACM中常用的algorithm库函数用sort来解决排序问题,构造一个结构体显的更直接,重载cmp函数bool cmp(hc x,hc y){ return x.last}附代码 已AC;#include#includeusing namespace std;struct hc{ int
2012-07-03 11:06:34
293
原创 sort与qsort函数
待解答http://wenku.baidu.com/view/e064166daf1ffc4ffe47ac67.html
2012-07-03 02:15:47
244
原创 活动安排问题之贪心算法
问题描述:设有n个活动的集合E={1,2,.....,n},其中每个活动都要求使用同一个资源(如演讲会场),而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间Si和一个结束时间Fi,且Si问题分析: 贪心算法 采用的是至顶往下的方式来考虑问题,不像动态规划采用至上向顶的方式,本问题核心思想,每次采用结束时间最早的那个,留下尽可能多的时间来考虑
2012-07-02 23:05:46
2089
1
原创 NYOJ 49背包问题
描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行”。今天一早小明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N 元。于是,他把每件物品规定了一个重要度,分为5 等:用整数1~5 表示,第5 等最重要。他还从因特网上查到了每件物品的价格(都是整数
2012-06-28 17:16:30
456
原创 01背包问题
//背包01问题确立状态方程:联系上编的装配线问题,其状态方程是通过第j个站的最快时间,也是一个递归表达式t[1][j]=min(s[1][j-1]+a1,j,s[2][j-1]+jump2[j-1]+a1,j] t[2][j]=min(s[1][j-1]+jump1[j-1]+a2,j,s[2][j-1]+a2,j)说明通过各条装配线各个位置的最优路线最优子结构的确定0
2012-06-28 00:54:30
234
原创 指向指针的引用
http://topic.csdn.net/u/20100118/21/f78eb87f-269e-4d9c-9ab5-1655d77faece.html原帖问题一:((A*)p)时,由于p是一个B*在转换时,会产生一个临时变量,而在c++中临时变量是不允许作为非const引用的( A reference that is not to 'const' cannot be bound to
2012-06-26 00:43:11
214
原创 算法导论 动态规划入门之装配线调度问题
问题:略#includeusing namespace std;int main(){ int n; cin>>n; //装配线上装配站的个数 int t1[50],t2[50]; //每种装配线上装配站耗费的时间 int i,j,f1[50],f2[50]; for(i=1;i>t1[i]; for(j=1;j>t2[j]; int e1,e2,x1,x2; //进入与离开的时间 cin>>
2012-06-25 14:00:57
317
原创 ZOJ1006
q:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1006a: 水题啊,。。。。 基本是对的,,但格式没转换,懒转换了。。#includeusing namespace std;int main(){ int plaincode[28]; //明文整数数组
2012-06-16 22:39:49
505
原创 ZOJ1879
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1879题意:如果绝对值之间的差异连续元素在所有的值1到n - 1。例如,1423是一个快活跳线,因为绝对的差异是3,2,和1。这个定义意味着,任何一个单一序列的整数是一个快活跳线。你是写一个程序来确定是否每个数序列是一个快活跳线。#inc
2012-06-15 22:15:34
501
原创 优先级队列
最小优先级队列每次插入元素后对其排序,使其从小到大排序Code:#includeusing namespace std;templateclass PQueue{ private: T *pelements; int count; int maxSize;
2012-06-15 00:10:32
273
原创 约瑟夫环问题(不带头结点单循环链表实现和数组实现)
Q:略 A: 为了简化过程,类中只有3个函数即可,构造,增加,约瑟夫环解决函数 Ps:做这道题是为了巩固链表知识,在这过程中,this指针很隐蔽,, Code; #includeusing namespace std;templatestruct LinkNode{ T data;
2012-06-13 16:26:05
4090
原创 单链表(带节点与不带节点)的倒置
这里为了简略,只有三个函数,插入,输出,逆置1.不带节点Code:void Rerserve(){ LinkNode*pr=NULL; LinkNode*p=first->link; //为什么p=first->link而不是first呢,因为画图可知,若p=first,则第一次循环时first改变了,相应的p也改变了,
2012-06-13 01:59:20
864
原创 递归写全排列
Q:略A:ANSWER 1: 先从第一项到最后一项与最后一项交换,然后全排列前n-1项; 全排列n-1项,把第一项到前n-1项与n-1项交换,然后全排列n-2项; 依次力推附代码:#includeusing namespace std;int main(){ void F(int a[],int i,int n);
2012-06-07 13:59:23
266
原创 八皇后问题
Q:略A:#includeusing namespace std;int Queen[8];bool IsTrue(int n); //n行是否合理void Next(int n); int sum;int MAZE[8][8];bool IsTrue(int n){ int i,j; for(i=0;i if
2012-06-06 21:50:20
274
原创 练习基础题《三》
Q:公司发了某市廛的购物券1000元,限制只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,请求法度列出所有的正好能花费完该购物券的不合购物办法。法度输入:第一行是一个整数m,代表可购买的商品的种类数。接下来是m个整数,每个1行,分别代表这m种商品的单价。法度输出:第一行是一个整数,默示共有几许种规划第二行开端,
2012-05-31 12:45:47
264
原创 练习基础题《二》
Q:小明假期同爸爸一起去书店,他选中了n本书,每本书的单价分别为:P1、P2、P3……Pn。不巧的是,小明的爸爸只带了M元钱,为了让小明渡过一个愉快的假期,爸爸仍然同意买书,但有一个要求,要小明从n本书中选出若干本,使得单价相加所得的和同M元最接近。你能够帮助小明解决这个问题吗?要求:总钱数M、书本数n以及各本书的价格从键盘或文件输入;如果有多种组合,应全部列出。A:解法①:利用二
2012-05-29 16:45:41
652
原创 练习基础题《一》
Q:5.**人员审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答**人员的问题中:甲说:“乙没有偷,是丁偷的。”乙说:“我没有偷,是丙便的。”丙说:“甲没有偷,是乙偷的。”丁说:“我没有偷。”请根据这四人的答话判断谁是盗窃者。A: 分析无论说的是真话还是假话,甲乙丙三人都是一人偷,一人没偷,则两个人必有一偷
2012-05-28 16:49:54
439
原创 括号匹配问题
没用模版写的,也没考虑多于的情况,练手。 //括号配对问题#includeusing namespace std;class stack{ private: int *a; int top; public: stack(int sz=100); void Push
2012-05-24 23:38:24
270
原创 NYOJ35 表达式求值
搞了差不多2天,原来一个是sstream的用法困惑好久,需要对数组清零#include#include#include#include#include#include#includeusing namespace std; char mid[1008],post[1008];char compare(char c,char d) //比较优先级
2012-05-23 23:19:55
389
原创 单链表
#includeusing namespace std;templatestruct LinkNode{ T data; LinkNode*link; LinkNode(LinkNode*ptr=NULL) { link=ptr;} LinkNode(T item,LinkNode*ptr=NULL) { data=i
2012-05-14 23:56:30
303
转载 结构体和类的内存分配
在默认情况下,为了方便对结构体和类中数据元素的访问和管理,当结构体或类内的数据元素的长度都小于机器字长时,就以结构体或类中最长的数据元素为对齐单位。也就是说,结构体或类的长度一定是最长数据元素的整数倍。如果结构体或类内存在长度大于机器字长的数据元素,那么就以机器的字长为对齐单位。结构体或类中类型相同的连续元素将在连续的空间,和数组保持一致。例如:(机器字长为32位)struct{
2012-05-13 13:24:19
541
原创 递归实现选择排序
Q:递归实现选择排序A:PS:递归三要素:1.可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的对象有规律地递增或递减。2、可以应用这个转化过程使问题得到解决。3、必定要有一个明确的结束递归的条件. A: 比如实现一个8个数直接的排序,把第一个数与后七个数比较,把最小值放在第一位,同样,把第二个数与后六个数比较,最小的放在
2012-05-12 23:14:52
1793
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人