- 博客(14)
- 收藏
- 关注
原创 jsA*算法
瞎搞的和之前一样看效果学了一个名词叫启发式搜索,大概就是在原来bfs寻路的基础上为队列中的点添加一个启发函数,计算出一个大概的值,在搜索的时候按照估值的大小优先寻找某些点。比如我在扩展点的基础上添加一个计算当前点到终点的曼哈顿距离,然后优先寻找曼哈顿距离最小的点,在bfs的基础上做点修改每次入队都要把曼哈顿距离最小的点放到队首,在搜索就可以了,所以我感觉和优先队列差不多,不过在js中可以使用split模拟优先队列/** *@function 曼哈顿距离 */function L(x1,y1,
2021-12-01 17:05:06
382
原创 javaScript 实现BFS可视化(plus)
完善了路径打印添加了记录路径数组let edge = []; /** * @function 初始化 */function init(){ for(let i =0;i<r;i++){ edge[i] = [] for(let j =0;j<l;j++){ edge[i][j] = {} edge[i][j].x = 0; edge[i][j].y = 0; } } //console.log(edge);}function p
2021-11-29 16:48:10
458
原创 javaScript 实现BFS可视化(青春版)
我为什么要做这个?无意间接触到了各种排序算法可视化的网页,想用以前学过的算法自己也弄一个可视化网页,那就从最简单的BFS开始好了前言这个网页还有很多bug没有解决目前也想不到好的方法,不过大致的功能已经差不多实现了以下是本篇文章正文内容一、网页大致样式二、使用步骤1.首先在白色边匡中选一个起点,以及一个终点,然后点击左上角的star就可以演示了灰色背景是障碍物2.演示思路1、js代码变量含义,let box = document.getElementsByClassN
2021-11-29 14:16:45
723
原创 格雷码
格雷码描述通常,人们习惯将所有 n 位二进制串按照字典序排列,例如所有 2 位二进制串按字典序从小到大排列为:00,01,10,11。格雷码(Gray Code)是一种特殊的 n 位二进制串排列法,它要求相邻的两个二进制串间恰好有一位不同,特别地,第一个串与最后一个串也算作相邻。所有 2 位二进制串按格雷码排列的一个例子为:00,01,11,10。n 位格雷码不止一种,下面给出其中一种格雷码的生成算法:1 位格雷码由两个 1 位二进制串组成,顺序为:0,1。n + 1 位格雷码的前 2n 个二
2021-01-31 12:27:35
524
原创 TZOJ 5035: 人口普查
5035: 人口普查可以把每个日期转换成一个整数来比较,因为题目说不会有并列,所以没什么问题#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<algorithm>#include<iostream>#define ll long long intusing namespace std;struct people{
2021-01-27 22:10:46
247
原创 TZOJ 4444: Chains
4444: Chains题目大意有N串链子,每串链子长度为Li,可以打开一串链子其中一个环去链接其他2条链子,求需要打开的环最小数量能够全部串成一条链子。给了样例,按照链子长度从小到大排序每次用最短的链子的环去链接最长的2条链子就可以得出样例给的答案了,按照这样写可以AC.#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<algorit
2021-01-26 22:47:59
137
原创 TZOJ 1190: 火星A+B
1190: 火星A+B描述读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……输入测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A
2021-01-25 23:04:00
366
原创 TZOJ 1086: Round and Round We Go
1086: Round and Round We Go按照题目意思操作输入一串字符,注意前面可以有多个0,然后就是大数乘小数问题。从2开始乘乘到该字符串的长度len。首先如果相乘结果比原字符串位数多可以直接排除了。否侧每次得到一个答案就循环这个字符串直到能和原字符串匹配。我一直WA的原因应该是直接遍历结果字符串寻找到第一个与原字符串第一个字符匹配的地方然后取余,发现有相同字符的时候就不行的,还有前导0迷惑了我想太多了。#include<stdio.h>#include<std
2021-01-24 23:16:06
242
原创 TZOJ 4850: 数列
4850: 数列将第N位换算成二进制N=1 001 3^0N=2 010 3^1N=3 011 3^0 + 3^1;N=4 100 3^2可得第N位数的值就是N的二进制位看成k进制的位即可#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<algorithm>#include<iostream>#define
2021-01-24 23:03:17
269
原创 1083: False coin
TZOJ 1083: False coin思路和1080: Counterfeit Dollar差不多,第一次看到这题就想到用枚举的方法枚举每一枚硬币去跑一遍记录,最后一定要注意一些细节。首先假设硬币i为假币,并且当它为轻的硬币;则:1、当记录为左边<右边时,因为它是轻的硬币,所以在左边去寻找这枚硬币,如果找到了那么跑下一条记录,否则枚举下一枚硬币。2、当记录为左边>右边,同理得在右边寻找硬币…3、当记录为左边=右边时,寻找左边和右边是否存在这枚硬币,如果存在则枚举下一枚硬币。当其中
2021-01-22 19:00:05
297
1
原创 TZOJ1022: Watchdog
1022: Watchdog题目大致意思:有 一个边长为S(2 <= S <= 40)的正方形格子,里面有H个仓库(1 <= H <= 50)每个仓库都有自己的坐标并且仓库不会重叠,问是否在格子中存在一个点使得以该点为圆心能覆盖到所有仓库并且该圆不能出界。如果有多个圆心输出序号最小的点。如果该点不存在则输出"poodle"因为题目数据量小可以从小到大枚举每个点是否满足条件,当有个点满足条件时,该点就是答案了。枚举每个点的时候更新一下该点距离他最远的仓库的距离l,判断以l为半径的
2021-01-21 22:24:55
341
1
原创 TZOJ5144
TZOJ5144:幸运数字描述定义幸运数字为数位(十进制)只含有 4 和 7 的数字。例如:4,7,47,777 等是幸运数字;5,72 等就不是幸运数字。定义函数 next(n)表示大于等于 n 的最小的幸运数字,现在给你一个区间[a, b]让你求 S(a,b)=next(a)+next(a+1)+…+next(b-1)+next(b)的值。输入第一行输入一个整数 T (T ≤ 10),表示测试样例个数,对于每个测试样例,输入两个空格分开的整数 a,b(1 ≤ a ≤ b ≤ 109 ) 表示给
2021-01-20 23:28:45
600
1
原创 1415: 无限的路
TZOJ1415: 无限的路 (弱者打表)给定4个整数x1,y1,x2,y2,求2点之间折线的长度,由于数据都不会超过100,我先想到就是打表了…把每个点标记为dp[i][j]指的是点(i,j)到原点(0,0)的折线长度答案就是abs(dp[x1][y1]-dp[x2][y2])的值.所以分析一下规律,让dp[0][0]=0让我们来打打表:(0,1)=1;(1,0)=1+sqrt(2)=(0,1)+sqrt(2);(0,2)=(1,0)+sqrt(2x2+1x1);(1,1)=(0,2)
2021-01-19 21:53:07
189
原创 1018:Card Trick
TZOJ 1018:Card Trick随便记录一下这题,题意很简单,按照描述对扑克模拟就好了。比如对于 3 1 4 5 2;1:把前面1张牌洗到后面:1 4 5 2 3 然后弹出第一张牌 1;得到4 5 2 3;2:把前面2张一次洗到后面:{i:5 2 3 4;ii: 2 3 4 5}弹出第一张2;得到3 4 5;3:洗前面3张:{i:4 5 3;ii:5 3 4;iii:3 4 5}弹出3,得到45;4:剩下2张牌一次洗4次{i:5 4;i:4 5…}弹出 4 得到5;所以最后排列为 1
2021-01-18 22:55:10
214
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人