算法
文章平均质量分 76
jiejiexiao
这个作者很懒,什么都没留下…
展开
-
Dijkstra算法---单源最短路径
package com.xjj.Ah;/*-------Dijkstra算法---单源最短路径----- * --求最短路径-----如果两点间的直接距离 > 引入第三点间的间接距离 * * 1.一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径” * 2.已知最短路程的顶点集合P,未知最短路径的顶点集合Q * 3.通过“边”来--松弛--基顶点到其余各个顶点的路程原创 2018-01-30 17:02:16 · 177 阅读 · 0 评论 -
蓝桥杯--分解质因数
问题描述 求出区间[a,b]中所有整数的质因数分解。输入格式 输入两个整数a,b。输出格式 每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)样例输入3 10样例输出3=34=2*25=56=2*37=78=2*2*29=3*310=2*5提示 先筛出所有素数,然后再分解。数据规模和约定 2<=a<...原创 2018-03-15 23:44:53 · 387 阅读 · 0 评论 -
蓝桥杯--回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。样例输入3 31 2 34 5 67 8 9样例输出1 ...原创 2018-03-10 14:47:58 · 560 阅读 · 0 评论 -
蓝桥----FJ的字符串
问题描述 FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = “ABACABADABACABA” … … 你能找出其中的规律并写所有的数列AN吗?输入格式 仅有一个数:N ≤ 26。输出格式 请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。样例输入3样例输出ABACABApackage...原创 2018-03-11 14:18:03 · 295 阅读 · 0 评论 -
蓝桥杯--关联矩阵
问题描述 有一个n个结点m条边的有向图,请输出他的关联矩阵。输入格式 第一行两个整数n、m,表示图中结点和边的数目。n<=100,m<=1000。 接下来m行,每行两个整数a、b,表示图中有(a,b)边。 注意图中可能含有重边,但不会有自环。输出格式 输出该图的关联矩阵,注意请勿改变边和结点的顺序。样例输入5 91 23 11 52 52 32 33 24 35 4样例输出1...原创 2018-03-17 23:00:02 · 526 阅读 · 0 评论 -
蓝桥杯--摆动序列
问题描述 如果一个序列满足下面的性质,我们就将它称为摆动序列: 1. 序列中的所有数都是不大于k的正整数; 2. 序列中至少有两个数。 3. 序列中的数两两不相等; 4. 如果第i – 1个数比第i – 2个数大,则第i个数比第i – 2个数小;如果第i – 1个数比第i – 2个数小,则第i个数比第i – 2个数大。 比如,当k = 3时,有下面几个这样的序列: 1 2 1 3 ...原创 2018-03-17 23:00:35 · 1028 阅读 · 0 评论 -
动态规划----数塔问题
package com.xjj.algorithm;import java.util.Scanner;/*-----动态规划----数塔问题------ * 1.n层有n个数 :求第一层到n层每次一个数最大和为多少? * * 2.除第一个数每个数都有选与不选两种决策,即每个数都有两个分支: * 则如果用枚举为 O(2^n) 很大; * * 3.令dp[i][j]为...原创 2018-03-22 16:38:45 · 770 阅读 · 0 评论 -
动态规划--最大连续子序列
如输入:-2 11 -4 13 -5 -2输出:20为:11+(-4)+13package com.xjj.algorithm;import java.util.Scanner;/*----最大连续子序列和--动态规划---- * 1.令dp[i] 为以 A[i] 结尾的的连续序列的最大和,必须以A[i]结尾;有A[i]结尾有如下两种情况: * a.以A[i]开始,以A[i...原创 2018-03-22 17:39:47 · 202 阅读 · 0 评论 -
动态规划--最长公共字序列
package com.xjj.algorithm;import java.util.Scanner;/*----最长公共子序列--动态规划---- * 1.用dp[i][j] 表示 A 的 i 位与 B 的 j 位之前的公共字序列的长度,则其满足: * a.当A[i]=B[i] 时,dp[i][j] = dp[i-1][j-1] + 1; * B.当不相等时,继承自 ...原创 2018-03-22 20:19:12 · 201 阅读 · 0 评论 -
蓝桥杯----拦截导弹
问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所...原创 2018-03-20 23:47:47 · 357 阅读 · 0 评论 -
动态规划--斐波那契数列
/*---动态规划--斐波那契数列---- * 1. 如果用平常的递归会涉及很多的重复的计算: * 如计算f(5)=f(4) + f(3),然后f(4)=f(3)+f(2);重复计算了f(3); * 避免重复运算,用一数组保存已经计算过的值 * 2. 此方法叫记忆化搜索:将 O(2^n) 降到 O(n)package com.xjj.algorithm;import ja...原创 2018-03-21 23:56:04 · 460 阅读 · 0 评论 -
最小公倍数----最大公约数
package com.xjj.algorithm;import java.util.Scanner;public class Gcd { //欧几里得算法求最大公约数 public int gcd(int m, int n){ if (n == 0) return m; return gcd(n, m % n); } //最小公倍数 public int...原创 2018-03-26 21:29:13 · 131 阅读 · 0 评论 -
找质因子
package com.xjj.algorithm;import java.util.Scanner;/*----找质因子---- * 1. 如 180=2*2*3*3*5 * * 2. 对于一个正整数N,其质因子要么全部在根号n以内,要么只存在一个大于其根号 * */public class Prime_factors { public static int n; /...原创 2018-03-27 17:28:09 · 925 阅读 · 0 评论 -
数字积木--dfs
字,0~9。搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。最后搭成4层的金字塔形,必须用完所有的积木。下面是两种合格的搭法: 0 1 2 3 4 56 7 8 9 0 3 1 7 5 29 8 6 4 请你计算这样的搭法一共有多少种?package com.xjj.lqtest;/*----数字积木----...原创 2018-03-27 20:46:45 · 423 阅读 · 0 评论 -
寒假作业--蓝桥杯
寒假作业现在小学的数学题目也不是那么好玩的。看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □ (如果显示不出来,可以参见【图1.jpg】) 每个方块代表1~13中的某一个数字,但不能重复。比如: 6 + 7 = 13 9 - 8 = 1 3 * 4 = 12 10 / 2 = 5...原创 2018-03-28 00:05:40 · 338 阅读 · 0 评论 -
任意进制转换
package com.xjj.test;public class BinaryTest { //设置字符数组 //可以添加任意不重复字符,提高能转换的进制的上限 //添加36进制 static char chs[] = new char[36]; static { for(int i = 0; i < 10 ; i++) {...原创 2019-02-28 14:49:17 · 700 阅读 · 0 评论 -
求年份之差
/*----求两年之差----* 1. 20130101--20130102* s输出为 2** */思路:该类题用二维数组保存每月的天数,坐标代表月份,二月份[2][0]=28天为平年,[2][1]=29天为闰年;然后判断两年之差--一天一天的加...package com.xjj.algorithm;import java.util....原创 2019-03-20 16:51:58 · 341 阅读 · 0 评论 -
蓝桥杯--高精度加法
问题描述 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。 定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。 计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数...原创 2018-03-09 13:49:03 · 343 阅读 · 0 评论 -
蓝桥杯--高精度乘法
输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。 首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。package co...原创 2018-03-08 23:16:26 · 625 阅读 · 0 评论 -
Floyd最短路径算法---多源最短路
package com.xjj.Ah;/*------只有5行的Floyd最短路径算法---多源最短路--- * 1.i 到 j 的直接路径可以引入其他 k 节点使其更短 * 先通过 1 节点,a[i][j] > a[i][1]+a[1][j], * 则a[i][j] = a[i][1]+a[1][j] * 再通过 1,2 节点,a[i][j] > a[i][2原创 2018-01-30 16:45:42 · 483 阅读 · 0 评论 -
单源最短路--SPFA算法--邻接链表
package com.xjj.lanqiao;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Scanner;import javax.swing.plaf.metal.MetalIconFactory.FolderIcon16;/*----原创 2018-01-30 23:08:01 · 374 阅读 · 0 评论 -
桶排序
package com.xjj.Ah;import java.util.Random;/*-----------桶排序----------- * 1.桶排序, 是最快最简单的排序。有多宽维度,就要申请多大的数组, * 2.桶排序的时间复杂度是O(M+N),是最快的排序,它也是最简单的排序。 * 3.往桶里装数 * 4.浪费了空间 * 5.不能排小数 * * 6.去重 * *原创 2018-01-30 23:12:07 · 206 阅读 · 0 评论 -
快速排序
package com.xjj.Ah;/*-----快速排序------- * 1.找一个数作为基准数,左边都=x * 2.两端开始“探测”,可以用两个变量i和j,分别指向序列最左边和最右边,“哨兵i”和“哨兵j” * 3.其实就是将这一轮的基准数归位,直到所有的数都归位为止 * 4.快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2), * 5.它的平均时间复杂度为O(Nlog原创 2018-01-30 23:15:18 · 137 阅读 · 0 评论 -
Bellman - ford算法--单源最短路径
package com.xjj.lanqiao;import java.util.Scanner;/*----Bellman - ford算法------ * 是求含“负权”图的“单源最短路径”的一种算法,效率较低,代码难度较小。 * 其原理为连续进行松弛,在每次松弛时把每条边都更新一下, * * 1. 第一个节点到其他节点的最小距离 * 2. 图的任意一条最短路径既不能包含负原创 2018-01-31 14:24:00 · 238 阅读 · 0 评论 -
树--并查集--犯罪独立数及头目
package com.xjj.Ah;import java.util.Scanner;/*-----树--并查集--犯罪独立数及头目--- * 1. 并查集,通过一维数组来实现,其本质是维护一个森林。 * 刚开始,森林的每个节点都是孤立的,之后一些条件...逐渐将这些并成一颗树 * 合并:就是找根节点的过程, 遵守 “靠左” 及 “擒贼先擒王” 的原则 * 还需原创 2018-01-31 15:47:18 · 183 阅读 · 0 评论 -
树--并查集--犯罪独立数及头目
package com.xjj.Ah;import java.util.Scanner;/*-----树--并查集--犯罪独立数及头目--- * 1. 并查集,通过一维数组来实现,其本质是维护一个森林。 * 刚开始,森林的每个节点都是孤立的,之后一些条件...逐渐将这些并成一颗树 * 合并:就是找根节点的过程, 遵守 “靠左” 及 “擒贼先擒王” 的原则 * 还需原创 2018-01-31 22:46:51 · 116 阅读 · 0 评论 -
Kruskal最小生成树--快排--并查集
package com.xjj.Ah;import java.util.Scanner;/*-----Kruskal最小生成树--快排--并查集--- * 1. Kruskal: * 首先按照边的权值从小到大排序 * 每次从剩余的边中选择权值较小且边的两顶点不在同一集合(不产生回路的边) * 加到生成树中,直到加入了 n-1 条边 * 2. 权值边排序原创 2018-01-31 22:47:38 · 128 阅读 · 0 评论 -
Prim--最小生成树--类Dij
package com.xjj.Ah;import java.util.Scanner;/*-----Prim--最小生成树--类Dij----- * 1. 任意从一个点出发开始构造生成树,用book[]来标记哪些点已经加入生成树 * 用dis[]来记录生成树到各个顶点的距离,从dis[]中选出离生成树最近的顶点(temp),加入到生成树, * 在以temp为原创 2018-02-01 14:42:21 · 189 阅读 · 0 评论 -
枚举 + 深度搜索 ----炸弹人
package com.xjj.Ah;/*---枚举 + 深度搜索 ----炸弹人---- * 1. 炸弹能到达的地方最多能炸死的敌人数 * 2. 用枚举法来获得每个空格放置炸弹能炸死的敌人数,用深度搜索法来获得能达到的地方 * 3. 先沿着一个方向深度搜索,遇到墙,在将此点四个方向都遍历完就返回, * 4. book[][] 标记是否已经遍历 * * 5. 深度优先搜索关键:当原创 2018-01-29 16:36:09 · 184 阅读 · 0 评论 -
枚举 + 广度搜索 ----炸弹人
package com.xjj.Ah;import java.util.LinkedList;/*---枚举 + 广度搜索 ----炸弹人---- * 1. 炸弹能到达的地方最多能炸死的敌人数 * 2. 用枚举法来获得每个空格放置炸弹能炸死的敌人数,用广度搜索法来获得能达到的地方 * 3. 用一个队列来保存能达到的地方,入队出队来依次深入...,book[][] 标记是否已经入队原创 2018-01-29 15:42:14 · 293 阅读 · 0 评论 -
深度搜索--图中独立子图的个数及面积
package com.xjj.Ah;import java.util.Scanner;/*----深度搜索--图中独立子图的个数及面积--- * 1.Floodfill漫水填充法(种子填充法): * 查找种子周围的点,将与种子相近的点入队作为新种子... * 2.着色法:对相邻相识点进行着色 * 3.0为海,否则为小岛 * * */public class原创 2018-01-29 20:49:27 · 1213 阅读 · 0 评论 -
深度搜索--水管工游戏
package com.xjj.Ah;import java.util.LinkedList;/*----深度搜索--水管工游戏---- * 1. remove(),removeFirst():先移除在获取元素 * 2. 利用队列输出 * * 3.基本模型 * void dfs(int i, int j) * { * 判断边界--return *原创 2018-01-30 11:17:30 · 433 阅读 · 0 评论 -
图的遍历--深度优先遍历
package com.xjj.Ah;import java.util.Scanner;/*----图的遍历--深度优先遍历---- * 1. 深度优先遍历:首先从一个未走过的顶点作为起点,沿着该点去尝试访问其他未访问的点... * 在以该点作为新的起点,继续访问其他顶点... * * 3.基本模型 * void dfs(int start) * {原创 2018-01-30 13:56:08 · 189 阅读 · 0 评论 -
图的遍历--广度优先遍历
package com.xjj.Ah;import java.util.LinkedList;import java.util.Scanner;/*------图的遍历--广度优先遍历----- * 1.首先以一个未访问的顶点为起点(进队列),访问其所有有边的顶点(出队)...在以该顶点为起点... * * 2. 基本模型 * void bfs(int start) *原创 2018-01-30 13:56:42 · 250 阅读 · 0 评论 -
深度遍历----最短路径----邻接矩阵
package com.xjj.Ah;import java.util.Scanner;/*-----深度遍历----最短路径----邻接矩阵--- 1.基本模型 * void dfs(int start) * { * 标记该点 * 如果所有点访问完返回(return) * 访问所有点 * for(int i = 1; i <=原创 2018-01-30 15:06:40 · 582 阅读 · 0 评论 -
广度遍历图--最少转机次数
package com.xjj.Ah;import java.util.LinkedList;import java.util.Scanner;/*-----广度遍历图--最少转机次数----- * 1. 广度适用于权值相同的情形 * 2. 涉及到某点到某点最短次数,用广度入队(同层步数相同) * * */public class Ah_5_3bfs { static in原创 2018-01-30 16:31:55 · 1403 阅读 · 0 评论 -
素数--质数--质因子
注:质数只需求到根号n,可用一数组保存1-n之间的素数,可以提高效率。package com.xjj.algorithm;import java.util.Scanner;/*----找质因子---- * 1. 如 180=2*2*3*3*5 * * 2. 对于一个正整数N,其质因子要么全部在根号n以内,要么只存在一个大于其根号 * */public class Pr...原创 2019-03-20 17:31:13 · 418 阅读 · 0 评论