算法Algorithm
文章平均质量分 65
daisyleedq
最近找回了账号,在考虑是否继续维护这个停更5年的账号呢?
展开
-
C,C++算法细节记录(不断增加中)
gets(a);//读入一行字符串,从0下标开始存储原创 2014-09-04 19:50:21 · 403 阅读 · 0 评论 -
scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精深!!
点击打开原文链接scanf杂谈 不得不说C语言真是博大精深!相比其他很多语言来说,C语言给人的表象就是结构精炼,内容简单。注意,那仅仅是表象!的确,C语言入门简单得很。但要真正做到掌握C语言甚至达到驾轻就熟的程度,谁敢说容易? 就从函数scanf说起吧。对于学习C的朋友来说,最熟悉的函数除了入门第一个"Hello World"程序用到的printf外,转载 2015-02-08 00:24:31 · 1494 阅读 · 0 评论 -
栈的思想解决火车出站问题
编号为1,2,3,4 的四列火车通过一个栈式的列车调度站,可能得到的调度结果有哪些?如果有n 列火车通过调度站,请设计一个算法,输出所有可能的调度结果。 【答】: 解题思路:栈具有先进后出、后进先出的特点,因此,任何一个调度结果应该是1 ,2 ,3 ,4全排列中的一个元素。由于进栈的顺序是由小到大的,所以出栈序列应该满足以下条件:对于序列中的任何一个数其后面所有比它小的数应该是原创 2014-09-04 20:49:05 · 4142 阅读 · 0 评论 -
二叉树的层序遍历 先序遍历
//记得层序遍历是放入队列,排队等待,而不是递归,一搜到底 //永远记得,绝大多数时候是查看地址是否为空,也就是不存在。而不是这个结点为空,那是存在这个结点但是结点的内容为空 struct node{ int data;//数据域 int layer;//层次 node* lchild;//左子树指针 node* rchild;//右子树指针 };//层序遍历:输出的访问。和BFS原创 2015-03-26 23:43:04 · 536 阅读 · 0 评论 -
非递归 自底向上归并排序
点击打开链接今日翻开严蔚敏的《数据结构(C语言版)》感慨一二,首先书中讲解之详细与形象乃本人博文所不能比拟,有这么一句话说的好"所有的答案都在书中,只是你学习的时候没有注意罢了";其次书的第一章里提到算法的设计要求,除了效率健壮性等,可读性也是重要的一部分,让楼主想起了昨天所写的插入排序中,从后向前查找的代码就比从前向后查找的代码可读性高,这样代码出错的概率降低 和 他人阅读的效率提升转载 2015-03-12 10:27:23 · 495 阅读 · 0 评论 -
分治 棋盘覆盖 超级好理解的一种写法!
#include//using namespace std;int tile=1;//编号 int board[100][100];//棋盘/*tr--当前棋盘左上角的行号 * tc--当前棋盘左上角的列号 * dr--当前特殊方格所在的行号 * dc--当前特殊方格所在的列号 * size:当前棋盘的:2^k */ //就是递归一个方块中有一个特殊方块的状态,没有特殊方块,要原创 2015-04-10 20:46:57 · 442 阅读 · 0 评论 -
全排列 DFS
全排列 深度搜索原创 2015-04-08 19:16:23 · 430 阅读 · 0 评论 -
HDOJ 1016 圆环和为素数 类似于全排列、八皇后,仅check函数不一样而已
HDOJ 1016 DFS原创 2015-04-07 23:07:08 · 422 阅读 · 0 评论 -
自己整理的c/c++输入输出的注意点
fgets(buffer,BUFFERSIZE,stdin);sscanf(buffer,"%d%d,&a,&b");sprintf(buffer,"%d %d %d %d %d",abc,de,x,y,z);>>右移//右移出空位或者补0或者补符号位,视机器而定 _rotl(0x07,2);//28_rotr(0x07,1); 2147483651strchr(s原创 2015-02-15 17:27:54 · 518 阅读 · 0 评论 -
HDOJ 1312 只走黑格
//AC了!scanf()输入行列式的一定要加getchar();!//最后一个bug,在循环语句中写了return ,其实应该是continue,即如果这个方向不符合,就继续下一个方向!//开心,总结下,如果开始了某个思路,就不要轻易换思路,条条大路通罗马,你得不出正确答案,不是因为思路不对,而是逻辑上有一些瑕疵。大方向是对的!//也不要过总是用断电调试,比较浪费时间。//返回值溢出原创 2015-04-07 22:23:26 · 351 阅读 · 0 评论 -
Sort the array one by one without changing current array
思想:每一次从原来的数组中找出第几个小的数。思路是,每次挑完一个,把这个数存在maxValue里面,表示已经有序的数组里面的最后一个。进行下一轮是,用选择排序法,但是要注意每次都要大于maxValue的选择排序法。#include#include#includeusing namespace std;int MAX_N=11;void swap(in原创 2016-12-01 01:45:29 · 324 阅读 · 0 评论 -
拓扑排序找到图的根,用于计算烷烃的个数
//拓扑排序找根,那就是找重心喽? void Top(int n,int x){ memset(visit,0,sizeof(visit)); int head=0,tail=0; for(int i=0;i<n;i++){ if(g[i][n]==1){//对于与n相连接的点,如果g[i][n]==1,那么说明是相连的 visit[i]=1; level[tail]=0原创 2017-01-05 05:47:51 · 462 阅读 · 0 评论 -
Sodoku classical backtracking
Sodoku classical backtrackingbacktracking the same as 8 queens and prime number circle//pass#include#includeusing namespace std;#define N 9 int grid[N][N] = {{3, 0, 6, 5, 0, 8, 4, 0, 0},原创 2017-01-21 06:37:44 · 510 阅读 · 0 评论 -
sort 用法最简单到自定义comp
从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法转载来自点击打开链接sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级。本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法:1、sort入门:使用sort需要包含algorit转载 2015-02-26 14:20:28 · 1352 阅读 · 0 评论 -
极好!清晰简洁!scanf()与gets在输入时差别 printf与puts在输出时差别
scanf(),printf()和gets(),puts()在输入输出字符串时的区别1.scanf("%s",str)和gets(str)scanf("%s",str)和gets(str)均可用于输入字符串到字符数组变量str,但scanf("%s",str)匹配连续的一串非空白字符,遇到空格、tab或回车即结束,字符串前的空白字符没有存入str,只表示输入还未开始(感谢garbage转载 2015-02-23 20:37:49 · 473 阅读 · 0 评论 -
stoken 的使用
点击打开链接原型编辑char *strtok(char s[], const char *delim);2功能编辑分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。例如:strtok("abc,def,ghi",","),最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。3说明编辑strtok()用来将字符串分转载 2015-02-23 23:48:58 · 4915 阅读 · 0 评论 -
八大排序算法详解
void SelectSort(int r[],int n){ int i,j,min,max,temp; for(i=1;i<=n/2;i++){//做不超过n/2趟排序 min=1;max=1;//分别记录最大关键字和最小关键字记录的位置 for(j=i+1;j<n-1;j++){ if(r[j]>r[max]){ max=j;continue; } i转载 2014-09-02 21:29:16 · 565 阅读 · 0 评论 -
学习算法之路
转一个搞ACM需要的掌握的算法.要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什么就眼红,发挥自己的长处,这才是重要的. ========================================================第一阶段:练经典常用算法下面的每个算法转载 2014-08-28 18:05:06 · 433 阅读 · 0 评论 -
八大排序算法特性复杂度总结
总结各种排序的稳定性,时间复杂度、空间复杂度、稳定性总结如下图: 关于时间复杂度:(1)平方阶(O(n2))排序各类简单排序:直接插入、直接选择和冒泡排序;(2)线性对数阶(O(nlog2n))排序 快速排序、堆排序和归并排序;(3)O(n1+§))排序,§是介于0和1之间的常数。 希尔排序(4)线性阶(O(n)转载 2014-08-28 21:46:30 · 480 阅读 · 0 评论 -
队列初步
/*需求:首先将第1个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数再放到这串数的末尾,再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小哈的QQ啦。现在你来帮帮小哼吧。小哈给小哼加密过的一串数是“6 3 1 75 8 9 2 4”。 分析: 我们来小结一下,在队首删除一个数的操作是h原创 2014-08-29 20:25:28 · 428 阅读 · 0 评论 -
快速排序的原理与优化
下面对于一些时间复杂度作详解:转载链接:百度知道关于快排1.快速排序-时空复杂度:快速排序每次将待排序数组分为两个部分,在理想状况下,每一次都将待排序数组划分成等长两个部分,则需要logn次划分。而在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,快速排序将不幸退化为冒泡排序,所以快速排序时间复杂度下界为O(nlogn),最坏情况为O(n^2)。在实际应用转载 2014-08-29 20:55:21 · 721 阅读 · 0 评论 -
插入排序类:直接插入排序和希尔排序
//myself test 插入排序类 #include//1.直接插入排序:(调试一次就成功啦!鼓励一下,当然是在自己确认过逻辑没错的情况下)void InsertSort(int a[],int n){ int i=0,j=0; for(i=1;i<n;i++){//数组元素个数从1~n.其中0号位置放置哨兵,共n+1个元素,被排序数为n个 if(a[i+1]<a[i]){原创 2014-08-29 20:23:49 · 548 阅读 · 1 评论 -
PAT测试历程
今天做了一个第一题就半天不过。原理评测原创 2014-10-12 20:14:32 · 666 阅读 · 0 评论 -
设计简单的计算器-浙大2006年机试,参考王道机试指南
//简单的计算器/*读入一个只包含+,-*,/的非负整数计算表达式,计算该表达式的值*//*样例输入:1+24+2*5-7/110样例输出:3.0013.36 */ #include#includeusing namespace std;char str[220]; //定义优先级矩阵 int mat[][5]={//表达式首尾标记符为0号,+为1号,-为2号,*原创 2014-10-13 19:26:43 · 941 阅读 · 0 评论 -
指向函数的指针定义与使用
来自百度知道的一篇回答,非常详尽剑侠→战天意:http://zhidao.baidu.com/link?url=SETuZnCKOvjBpNTBzRi8nxR3tRIcLbcGyTwszjdeUujNGQohPs0T1RDf9XEsWFCjBEi3yvuEf5GUAcDI0lkJ_q看完以下的,您就知道什么是指向函数的指针了,其实就是回调函数!程序员常常需要实现回调。本文将讨论转载 2014-11-27 20:53:04 · 672 阅读 · 0 评论 -
关于break的用法 特别易混淆
break是用来跳出或者终止循环的break用于循环语句或分支选择(case),作用是跳出或者终止循环,例如main(){int i,sum=0;for(i=1;i<101;i++){sum+=i;if(i==50) break;}}不用 if(i==50) break 时,求的是 1到100的和,用了break后只做1到50的循环if里可以用break,但对于if语句转载 2015-02-22 21:35:11 · 402 阅读 · 0 评论 -
C/C++标准输入输出与文件输入输出
C语言输入输出函数有很多,标准I/O函数中包含了如下几个常用的函数:标准输入输出:1. scanf, printfint scanf(const char *format, arg_list)scanf主要从标准输入流中获取参数值,format为指定的参数格式及参数类型,如scanf("%s,%d",str,icount);它要求在标准输入流中输入类似"son转载 2015-02-07 23:56:03 · 1440 阅读 · 0 评论 -
qsort 简单到自定义,也可以用整型返回值哦
C++sort 函数用法http://blog.csdn.net/fly_yr/article/details/18894549MSDN中的定义:templatevoid sort(RanIt first, RanIt last); //--> 1)templatevoid sort(RanIt first, RanIt last, Pred pr); //--转载 2015-02-26 14:45:07 · 426 阅读 · 0 评论 -
twin primes. serial and parallel
bool mark [N];vector primeList; void sieve () {memset (mark, true, sizeof (mark));mark [0] = mark [1] = false;for ( int i = 4; i < N; i += 2 ) mark [i] = false;for ( int i = 3; i * i <=转载 2017-06-26 04:32:31 · 628 阅读 · 0 评论