- 博客(28)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 POJ1258 最小生成树基础模板题通俗详细版(prim解法)
既然是基础题,就顺带详细一些讲一下算法吧题目意思:就是输入一个N,代表有N个点,然后给你一个N*N的数组,假定数组为map[N][N]数组中的每个数map[i][j]代表从i到j所需要的时间,问题是从0走到N最快需要用多长时间咋一看这样的题目用搜索应该也是可以的,不过我没试,后续试一下可以的话就把搜索的步骤也放上来。首先,来看一下Prim算法prim算法简单来说就是一个动态的更新路径的方法,举个栗子:假如我们有 A B C D 四个点,点和点之间有的相连有的不相连,现在...
2022-03-09 16:55:41
1863
原创 POJ - 3126
题目意思就是给你n对数,让你计算从一个数变成另一个数需要几步,其中一次只能变换个十百千上中的一位,并且变换前后的数必须都是素数思路:先打表,然后bfs搜索每一位数#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;int prime[10101];int book[10101];int n,m;int fla
2022-03-03 20:03:45
194
原创 ACM 括号匹配问题(栈的简单应用)
括号匹配HRBUST - 1549给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。Input输入数据有多组,每组数据不超过100个字符并含有( ,) ,[, ],{, }一个或多个。处理到文件结束。Output如果匹配就输出“yes”,不匹配输出“no”Inputsin(20+10){[}]Outputyesno思路:输入字符串后,用栈,如果字符串里有(,[,{,就压进.
2022-03-03 16:56:09
359
原创 利用STL解决二维数组过大内存溢出问题
前几天写一个程序,内存空间不够用,要开二维数组一直报错,后来查阅了一些资料总结了几种方法,在这里记录分享一下1. 如果你的程序没有内存限制,那你可以把数组定义在主函数外,用这个办法的话,数组最大可以定义到大概 test[10720][100000]这么大2.如果程序有内存限制可以用Vector容器代替数组,当然Vector是不可能真正的代替二维数组的,使用Vector会削去很大一部分功能3.下面这个我觉得比较好用限制又小的是map容器代替数组举个栗子test[12][1..
2020-06-20 17:03:18
2680
原创 手动实现霍夫变换直线检测,精确找出最长直线C语言或C++
最新在用C++做一个直线识别,但C++里没有Opencv函数可以调用,所以手动撸了一篇霍夫检测算法,后期发现只用霍夫检测没办法准确找出直线,只能找出近似点,最小二乘直线拟合也不够准确,非极大值抑制判断直线还没看,后续写了会补充,目前是采用深搜把最大投票值的点全都四个方向搜索一遍,记录最长直线和坐标,自己找的测试数据还算准确,有问题欢迎讨论// 输入数组大小// 输出坐标// 找出最大...
2020-04-25 10:12:57
1941
2
原创 简单邻接表和lin
邻接表与邻接矩阵有相似的作用:用于储存一个图中所有的节点,但是邻接矩阵比较浪费内存,当数据较小时,邻接矩阵还可以计算但是一旦数据较大,用邻接矩阵往往就会超时或者超内存,这时就要使用邻接表来存图了;为方便理解邻接矩阵与邻接表的储存方式看下图: 我们先规定一组数据 1 10 3 5 8 9 我们将所给的点标
2020-04-25 10:02:13
248
原创 HDU1043——八数码IDA*算法
之前写八数码用了广搜,从目标状态扩展路径,把所有可以走到的状态都标记起来,然后输入后直接判断这个状态是否被标记过,但是在poj上正确,在HDU上一直超时,poj时间是5000ms,HDU是1000ms,妥妥的超了,wrong使我进步,又恶补了IDA*的知识。先介绍一下我理解的IDA*,首先判断当前数码位置状态与目标数码位置状态是否可互达(后附简单介绍),如果不可以直接剪枝,如果可以,就算出当前状态...
2018-04-13 10:31:48
695
原创 poj1043------Eight八数码问题广搜记录路径
题目大意:给出八个数和一个x(代表零),问是否可以通过交换零和其它数字的位置到达最终状态思路:用广搜扩展目的状态所能到达的所有状态,然后直接判断,这个题目我用了map标记,HDU上会超时,把map改成康托展开,或者直接用IDA*算法应该就可以了#include <stdio.h>#include <string.h>#include <queue>#inc...
2018-04-11 10:19:30
684
1
原创 pat12-011玩转二叉树(二叉树镜面反转)
刚开始学二叉树的时候觉得太难理解,随便看了看,并没有认真练习,果然,天道好轮回,苍天饶过谁,好在pat上的二叉树习题不算太难,现根据前序中序建树,然后的dfs输出就行了,也可以建好树后反转,再层序遍历输出,略麻烦L2-011. 玩转二叉树时间限制 400 ms内存限制 65536 kB代码长度限制 8000 B判题程序 Standard作者 陈越给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜...
2018-03-29 11:33:08
1705
原创 L2-002. 链表去重
之前写l2-22时用了双端队列,导致这个题开始写的时候一直想着用双端队列,其实只要把链表用队列存起来然后,用数组分别把链表不重复部分的编号和重复部分的编号存起来就行了,具体看代码L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判...
2018-03-29 11:18:35
326
原创 第七届蓝桥杯题解
纯代码,无解析,第七题和第十题不会答案 1. 171700 2. 26 3. 29 4. swap(a,p,j); 5.f(a,k+1,m-i,b); 6.1580 第一题煤球数目有一堆煤球,堆成三角棱锥形。具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。注意:...
2018-03-24 17:36:57
338
原创 uva140Bandwidth带宽——字符串处理加全排列
/*带宽 题意:给出一串字符串,字符串中包括形如 A:FB;B:GC;D:GC;F:AGH;E:HD A:FB;表示点A与F相连,A与B相连 如果将这个字符串的顶点排序为 A B C F G D H E A与B之间边长为1; A与C不相连; A与F之间的边长为3; A与剩下的不相连; 以此类推B也是如此;在不同的顶点排列中,相连两点的边长随位置变化而变化 找出同一个顶点序列中最长的
2017-12-15 17:39:13
207
原创 15括号匹配(二)南阳理工NYOJ
#include#includeint main(){ int N; char s[110],track[110]; scanf("%d",&N); getchar(); while(N--) { memset(s,'0',sizeof(s)); memset(track,'0',sizeo
2017-09-15 10:21:19
386
原创 Tian Ji -- The Horse Racing HDU - 1052田忌赛马
/*中等题。贪心。分别将田忌和齐王的马排序,设田忌最快和最慢的马分别为f1和s1,齐王的是f2和s2。 共有五种情况: 1、f1 > f2,则有f1对阵f2,能赢齐王最快的马,当然是不二选择; (田忌最快的马能赢齐王最快的马,让田忌赢) 2、f1 < f2,则用s1和f2相比,因为肯定不能赢,用最慢的马去输代价最小; (田忌最快的马不能赢齐王最快的马,用田忌最慢的马跟齐王最
2017-09-14 20:43:14
245
原创 Function Run Fun HDU - 1331
// 记忆化搜索// 要注意以下几个条件之间的先后关系#include#includeint a,b,c;int sum;int dp[30][30][30];int dfs(int x,int y,int z){ if(x0 || y0 || z0) { return 1; }
2017-09-13 16:00:32
237
原创 Game Prediction POJ - 1323
// 大意就是输入 n, m,表示有 n 个人,每个人有 m 张牌,牌面从 1 到 m*n , 第二行输入 m 个数表示你自己手里有的牌和牌的大小// 问利用你手里现有的这几张牌,你最多可以通过比大小稳赢多少次,你的比其他人的都大,你一定会赢#include#includeint main(){ int a,b,num; int r = 1; while(scanf("%d %d",
2017-09-05 21:46:47
341
原创 HDU4540 ——威威猫系列故事——打地鼠
/* 题中给出一个 n*k 的数字矩阵 可以存为 map map[i][k]代表第 i 个时刻的第 k 只地鼠 dp[i][k]代表第 i 个时刻的第 k 只地鼠用的最少能量 因为要找的是最小的能量,所以要把dp[i][k]初始化成 inf 与数塔类似,数塔考虑的只有两个方向的数字( 左下或右下 ) 本题考虑的是一行数字,所以要加一层 for 循环 j=0 ~ j
2017-08-03 15:21:54
395
原创 POJ2367
/*题意:第一行输入n,代表有n个节点下面有i=1 到 i=n行,代表与第i个节点相连的节点i相当于父亲节点,第i行的数字是i的儿子节点,当第i行输入为0时,停止对该行的输入 将这些节点按辈分从大到小输出 拓扑排序模板题 输入时先用map把各个节点存起来 ,以题目为例 504 5 1 01 05 3 03 0 map[2][4] = 1, map[2][5]
2017-08-03 14:55:30
411
原创 ZOJ2042
/*思路: dp[i][j]=dp[i-1][j-a[i]] dp[i][j]=dp[i-1][j+a[i]] dp[i][j]表示 取前i个数 相加 或 相减 时 对k取余为j sum(a[i])%k = sum(a[i]%k)%k以 17 5 -21 15 为例 dp[0][0] = 1;dp[1][(0+17)%7] = a[1][3] //
2017-07-31 19:18:21
211
原创 POJ3021
/*题意:一个人从原点出发,要到距离原点s的位置,给出m个每一步能走的坐标位置,问是否可以到达S;如果能,输出最小步数,如果不能,输出impossible*/ /*题解:用广搜,把表示方向的坐标换成题目给出的(X,Y)然后比较走过的距离和给出的需要到达的位置*/ #include#include#include#include#includeusing namespac
2017-07-27 09:19:41
289
原创 POJ1611
/*题意:Sara病毒有传染性在一个最多有30000人的学校,我们需要找出被Sara病毒感染的人现在我们知道学生可能会加入不同的活动组织,如果某个活动组织有一个人 感染Sara病毒,就视为这个活动组织的其他人也感染了,一个学生可能不参加活动组织,也可能参加一个或者多个活动组织,现在有组织数,和参加组织的学生的编号(编号从0~n-1),编号为0的学生已经被确定感染,找出被感染的学生的数量
2017-07-26 21:08:46
262
原创 POJ2240汇率转化计算
/*题意:几种不同的物品可以互相交换,但是交换的数量不同比如:1 单位 US 换 0.5 单位 British 1 单位 British 换 10.0 单位 French 1 单位 French 换 0.21 单位 US现在我们可以用 1单位US 换 0.5 单位British;再用这 0.5单位British 换 5
2017-07-26 20:16:35
358
原创 POJ1700
//有n个人过河,n个人有n个时间,只有一条船,//每次船只能载两个人过河,过河的时间由船上的两个人中速度慢的决定 //比如 过河时间为2的人和过河时间为5的人一起过河,他们过河用的时间是5//求n个人过河最少用多久//1,2,5,10// 1,2 过去用2s;// 1回来用1s;//5,10 过去用10s// 2回来用2s//1,2过去用2s// sum = 2+1+10+2
2017-07-14 19:03:45
214
原创 POJ2676
数独题,9行9列,要求每个小九宫格中的数字都不一样并且,每行每列数字都不一样,0代表没有填入数字。 #include int num[9][9],f; int check(int n, int key) { int x,y,i,j; for (j = 0; j { i =
2017-05-24 22:00:09
564
原创 HDU1015
给出一串字符串只含有A--ZA代表1,B代表2,C代表3......以此类推输入m和字符串判断字符串中是否有五个这样的字母 满足 v - w^2 + x^3 - y^4 + z^5 = m ,并且只输出最大的一组数 ; #include#include#includeusing namespace std;char str[30];
2017-05-24 21:31:47
225
原创 HDU1072
Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on him. The labyrinth has an exit, Ignatius should get out of the labyrinth before the bomb explodes. The initial
2017-05-24 21:20:48
250
原创 POJ3009
#include #include using namespace std;int map[30][30];int dir[4][2] = {{-1,0},{0,-1},{1,0},{0,1}}; //四个方向 int flag;int minStep;int w,h;void dfs(int x, int y, int step){ int nx,
2017-05-24 20:56:37
961
3
原创 POJ3414
#include#include#includeusing namespace std;int a,b,c,k,flag,book[110][110],step1[1000],step2[1000];void dfs(int x,int y,int step){int tx,ty;if(step >= k)return;if(x == c || y
2017-05-24 20:45:47
252
codeblocks
2017-12-15
运行TransformerTracking遇到的小问题,以及求推书
2021-09-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人