算法
Allennnn_
一个初学者的艰难旅程
展开
-
POJ2488 A Knight's Journey(DFS)
/*1. dfs2. typedef typedef 类型 别名; 3. pair 【pair的定义】: 例子1:pair 变量名; 例子2(结合typedef): typedef pair POS; POS po; 【pair类型的引用】: 变量名.first = ...; 变量名.second = ...; 【pair的字面量形式】:原创 2018-03-26 22:01:49 · 273 阅读 · 0 评论 -
插入排序
#include using namespace std;int main(){ int n; int a[10]; cin>>n; for (int i=0;i<n;i++) cin>>a[i]; //*******插入排序********(由小到大) int key; for (int i=1;i<n;i++) { key = a[i]; //要插入的数原创 2016-12-06 15:27:18 · 275 阅读 · 0 评论 -
选择排序
//选择排序://选择一个数,与它后面的数进行比较,选出较小的数,进行交换 #include using namespace std;int main(){ int n; int a[10]; cin>>n; for (int i=0;i<n;i++) cin>>a[i]; //********选择排序*********(由小到大) int min; for (i原创 2016-12-06 14:48:35 · 298 阅读 · 0 评论 -
冒泡排序
#include using namespace std;int main(){ int n; int a[10]; cin>>n; for (int i=0;i<n;i++) cin>>a[i]; //*******冒泡排序*********(从小到大) for (int i=0;i<n-1;i++) for (int j=0;j<n-1-i;j++) if原创 2016-12-06 14:33:17 · 231 阅读 · 0 评论 -
C++ STL
vector头文件:#include<vector> 定义:vector<char>src;vector<int>num; 使用:向普通数组那样通过[ ] 来使用。例如 num[1]、src[2] 操作方法:vectorName . back() 返回最末一个元素vectorName . pop_back() ...原创 2016-12-06 14:25:25 · 301 阅读 · 0 评论 -
高精度加减法(改良版)
//说明:高精度1.1版本//添加了 交互 , 高精度减法的负号#include #include using namespace std;int a[100]={0},b[100]={0};int len1,len2,lenmax;string s1,s2;int main(){ void input(int a[],int b[]); void add(int a[],i原创 2016-12-10 11:57:57 · 746 阅读 · 0 评论 -
高精度加减法
#include #include int a[100]={0},b[100]={0}; //初始化数组int len1=0,len2=0,lenmax=0;//输入数字的位数lenmax是指最长的那个数字using namespace std;string s1,s2;int main(){ void input(int a[],int b[]); void add(int原创 2016-12-10 11:57:18 · 470 阅读 · 0 评论 -
HDU1873 看病要排队
看病要排队Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8506 Accepted Submission(s): 3549Problem Description看病要排队这个是地球人都知道的常识。原创 2016-10-23 11:46:17 · 445 阅读 · 0 评论 -
POJ 2259 Team Queue
Team QueueTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 4359 Accepted: 1512DescriptionQueues and Priority Queues are data structures which are known t原创 2016-10-23 11:44:37 · 545 阅读 · 0 评论 -
POJ 3984 迷宫问题
Description定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线原创 2016-10-23 11:42:58 · 335 阅读 · 0 评论 -
Floyd最短路径算法
下文多数来自:http://ahalei.blog.51cto.com/4767671/1383613典例: 暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。 上图中有4个城市8条公路,公路上的数字表示这条转载 2016-08-12 22:53:01 · 405 阅读 · 0 评论 -
二叉树的创建与遍历
#include #include using namespace std;struct BiTNode{ char data; struct BiTNode *lchild, *rchild;//左右孩子 }; BiTNode *T; //指向结构体(节点)的指针void CreateBiTree(BiTNode* &T);void PreOrder(B原创 2016-09-11 01:00:16 · 330 阅读 · 0 评论 -
二分法查找
//二分法查找#include using namespace std;int main(){ int a[15]; int n,i,num,top,mid,bott,local; bool flag=true,sign; char c; cout<<"你要输入多少个数?"; cin>>n; cout<<"请从小到大输入你要的"<<n<<"个数字: "<<endl; for原创 2016-12-06 18:40:22 · 475 阅读 · 0 评论 -
快速排序
#include using namespace std;int main(){ int a[10]; int x,n,i; void qs(int a[],int m,int n); cin>>n; for (i=0;i<n;i++) cin>>a[i]; qs(a,0,n); for (i=1;i<=n;i++) cout<<a[i]<<" "; cout<<en原创 2016-12-06 18:37:54 · 279 阅读 · 0 评论 -
素数筛
// 素数筛/* 原理 :开一个标记数组,全部初始化为 true,0、1不是素数,直接从数组里划掉。 紧跟着在 0、1后面的【最小的素数】是 2。 从2开始,凡是2的倍数、且小于100000的,全部标记为false。 再找2以后的、是【素数】的下一位数,是3 从3开始,凡是3的倍数、且小于100000的,全部标记为false。 再找3以后的、是【素数】的下一位数,是5 从5开始,凡原创 2018-03-31 21:56:36 · 235 阅读 · 0 评论 -
C++ STL自带的排序sort()
#include #include using namespace std;bool cmp(int a, int b){ return a > b;}int main(){ int a[5] = {3, 1, 4, 5, 2}; int b[5] = {3, 1, 4, 5, 2}; // sort()默认是从小到大。 sort(a, a+5); for (原创 2017-12-09 00:26:37 · 629 阅读 · 0 评论 -
堆排序
#include using namespace std;void maxHeapify(int *a,int i,int size) //调整成最大堆堆 { int lchild=2*i; //i的左孩子节点序号 int rchild=2*i+1; //i的右孩子节点序号 int max=i; //临时变量原创 2017-10-16 19:21:50 · 318 阅读 · 0 评论 -
dfs总结
最近在做学校出的蓝桥杯的初赛试题,发现很多题都可以用dfs暴力解决。本文将总结一下dfs常用的两种题型,最后根据这两种题型总结出一个dfs的模版。(下面注释中带“**”的注释是重点语句)①dfs解决全排列问题。典型题目:用数字 1~5进行全排列,显示出每一种情况并计算出总共有多少种情况。#include using namespace std;const int n = 5;原创 2017-04-05 17:56:43 · 491 阅读 · 0 评论 -
位运算
C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍原创 2017-03-23 13:26:21 · 276 阅读 · 0 评论 -
小数的处理
题目:如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗?显然,这个值是介于2和3之间的一个数字。请把x的值计算到小数后6位(四舍五入),并填写这个小数值。注意:只填写一个小数,不要写任何多余的符号或说明。2.506184代码:#include #include #include using原创 2017-03-22 15:42:51 · 785 阅读 · 0 评论 -
数字分割(拆数字)的两种方法
最近做了下蓝桥杯的初赛训练题,发现经常需要用到数字分割(例如把一个数字1234拆成1,2,3,4)所以总结了两种常用的拆分数字的方法:一个是while循环方法,一个是递归方法//数字分割,while循环方法 #include using namespace std;int main(){ int a,i=-1; int num[20]; cin>>a; while (a/1原创 2017-03-23 10:44:52 · 14606 阅读 · 0 评论 -
八皇后问题(dfs常规解法)
/*八皇后问题:在一个国际象棋棋盘上放 8个皇后,要求同一行、同一列、同一正对角线、同一反对角线上只能有一个皇后正对角线 = 行 - 列反对角线 = 行 + 列 */#include using namespace std;int n;int ans = 0; // 解法 int a[100]; // a[step] = x 表示 【第 step行 第 x 列】原创 2017-04-07 13:19:43 · 820 阅读 · 0 评论 -
八皇后问题(回溯法)
/*回溯法:在某种情况下,递归函数将不再递归调用它自身,而是返回上一层调用,这种现象成为回溯(backtracking)。 递归枚举算法常被成为回溯法*///要满足"八皇后",实际上就是恰好每行每列放置一个皇后.//如果用a[step]表示"第step行"皇后的"列编号"(即皇后的坐标为(step,a[step])),则问题变成了全排列生成问题#include using namesp原创 2016-03-08 00:06:22 · 386 阅读 · 0 评论 -
蓝桥杯——数字排列(dfs)
题目:今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:17126425374635当然,如果把它倒过来,也是符合要求的。请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。注意:只填写这个14位的原创 2017-04-07 00:49:15 · 771 阅读 · 0 评论 -
十六进制转八进制(代码)
/*十六 -> 1位十六进制变 4 位二进制 -> 3位二进制变 1 位八进制 (从后往前,前面不够3位就补零) (5B89)16 = (0101 1011 1000 1001)2 = (000 101 101 110 001 001)2 = (055611)8 = (55611)8*//*1.把16进制字符串分割 2.把每位 16进制 转化成 2 进制3.从后开始数原创 2016-12-09 00:50:03 · 1387 阅读 · 0 评论 -
链表实现
/*指针知识复习: int *p = new int; //此时指针p指向一个int对象,该对象没有被初始化 int *p = new int(0); //指针p指向一个int对象,该对象被初始化为0int *p = new int[10]; //指针p指向一个int型数组,该数组未被初始化int *p = new int[10](0); //指针p指向一个int型数组,该数组的元素都原创 2016-09-11 00:59:24 · 324 阅读 · 0 评论 -
Dijkstra最短路
/*算法关键代码: for (i=1;i<=n-1;i++) { min = inf; for (j=1;j<=n;j++) if (book[j]==0 && dis[j]<min) { min = dis[j]; u = j; } book[u] = 1; for (v=1;v<=n;v++) if (e[u][v] <原创 2016-09-11 00:58:27 · 323 阅读 · 0 评论 -
2n皇后问题
//2n皇后问题:1、放黑皇后,同时判断一些位置本身是否可放// 2、放白皇后,同时判断一些位置本身是否可放,并要判断一些位置是否已经放了黑皇后#include #include using namespace std;void search_1(int step);void search_2(int step);const int maxn=100;int n,ans=0原创 2016-03-09 17:46:12 · 419 阅读 · 0 评论 -
全排列问题
//求全排列一般有两种方法:1.递归枚举;2.用stl中的next_permutation()//递归枚举方法#include using namespace std;void permutation(int,int);const int maxn=100;int a[maxn],p[maxn],book[maxn]={0};int main(){ int n; cin>>n;原创 2016-03-07 15:49:57 · 300 阅读 · 0 评论 -
质数与合数系列——分解质因数
#include #include using namespace std;void fenjie(int x);int main(){int a,b,i,j;cin>>a>>b;for (i=a;i{coutif (i==1){coutcontinue;}for (j=2;jif (i%j==0) {fenjie(i);原创 2016-03-06 01:16:58 · 589 阅读 · 0 评论 -
高精度阶乘
#include using namespace std;const int maxn=10000;int main(){ int a[maxn]; int n,i,j,len=1,pre;//len用来记录位数,pre为进位数 cin>>n; a[0]=1; if ((n==0)||(n==1)) cout<<1<<endl; else { for (i=2;i<=原创 2016-03-06 01:16:15 · 366 阅读 · 0 评论 -
矩阵乘法
#include using namespace std;const int maxn=31;int main(){ int n,m; unsigned long int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn]; cin>>n>>m; int i,j,k,l; for (i=0;i<n;i++) for (j=0;j<n;j++)原创 2016-03-06 01:15:13 · 250 阅读 · 0 评论 -
使用excel来快捷计算日期的方法
1.)在其中一格中输入日期yyyy-mm-dd2.)点击“fx”选择公式,选用SUM公式3.)在number1处输入1)中的日期所在的单元格编号(如A1,A2,A3等),在number2处输入要+-的天数,最后点击"确定",即可得到结果(结果格式不对的话就要改变数据的格式为“日期格式”)原创 2016-03-06 00:45:46 · 788 阅读 · 0 评论 -
万年历
#include #include using namespace std;int main(){ int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int year,month,i,j,k,ans=1,sum=0,num=0;//ans用来计算所求年份的1月1日开头空多少日;sum用来计算所求月份开头空多少日 ;num用来做换行的计原创 2016-03-01 22:56:57 · 586 阅读 · 0 评论 -
插入排序
#include using namespace std;void insert_sort(int a[],int);const maxn=1000;int main(){ int a[maxn]; int n,i; cin>>n; for (i=0;i<n;i++) cin>>a[i]; insert_sort(a,n); for (i=0;i<n;i++) cou原创 2016-02-14 18:32:12 · 254 阅读 · 0 评论 -
归并排序
分治法思路:1.分解:把大问题分解为若干个小问题2.解决:递归地解决各个小问题,当子问题的规模足够小,则直接求解3.合并:合并各个小问题的解,从而得到大问题的解归并排序排序:1.分解:分解带排序的n个元素的序列,使其分成各具有n/2个元素的两个子序列2.解决:使用归并排序递归地排序两个子序列3.合并:合并两个已排好序的子序列//归并排序(小到大,有哨兵)原创 2016-02-14 18:16:16 · 304 阅读 · 0 评论 -
十六进制转八进制
十六进制--一位变四位-->二进制--三位变一位-->八进制例1:(5B89)16 = (0101 1011 1000 1001)2 = (000 101 101 110 001 001)2 = (055611)8 = (55611)8例2:(A374)16 = (1010 0011 0111 0100)2 = (001 010 001 101 110 100)转载 2016-01-24 16:35:14 · 880 阅读 · 0 评论 -
Lake Counting(DFS) POJ No.2386
有一个大小为n*m的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出园子里总共有多少水洼?(八连通指的是下图中相对w的*的部分)****w****限制条件:n,m思路:1.遍历整个园子。遇到w就进行dfs,同时水坑数+12.dfs函数:1)把w变成”.“。2)遍历四个方向,寻找符合的方向(不超出边界,该位置是“w"),把符合的方向的坐标作为递归的参数原创 2015-12-21 22:55:32 · 663 阅读 · 0 评论 -
竖式问题
有如下的加法算式。其中每个汉字代表一个数字。(如果存在对齐问题,可参见【图1.png】) 年 大年 过大年 能过大年 怎能过大年 我怎能过大年+ 让我怎能过大年---------------原创 2016-03-09 20:16:44 · 891 阅读 · 0 评论 -
数字分割
#include int i=0;int a[100];int main(){ void devide(int); int x,n; scanf("%d",&x); devide(x); printf("位数是:%d\n",i); printf("分割输出:"); for (n=1;n<i+1;n++) printf("%d ",a[n]); printf("\n逆序输原创 2016-03-10 11:01:06 · 468 阅读 · 0 评论