Breadth First Search,一种由近及远的遍历方式,从某个节点出发,始终优先访问距离最近的顶点,并一层层向外扩张。
广度优先遍历的序列不唯一。相邻节点的遍历顺序允许被任意打乱。
测试图的结构
12345678910111213141516171819graph1: A / \ B C / \ \D E F \ Fgraph2: 0 / \ 1 3 / \ / \2 4 6 \ / \ / 5 7 \ / 8
实践
1234567891011121314151617181920212223242526272829303132333435363738394041from collections import dequedef bfs(graph, start): # 初始化一个集合,用于存储已经访问过的节点 # 集合的特点是查找操作非常快,有助于判断节点是否已经访问过 visited = set() # 初始化队列,将起始节点加入队列中 # 队列用于存储 ...
Depth First Search,一种优先走到底、无路可走再回头的遍历方式。
深度优先遍历的序列不唯一。相邻节点的遍历顺序允许被任意打乱。
测试图的结构
12345678910111213141516171819graph1: A / \ B C / \ \D E F \ Fgraph2: 0 / \ 1 3 / \ / \2 4 6 \ / \ / 5 7 \ / 8
实践
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647from collections import dequedef dfs(graph, start): # 初始化一个集合,用于存储已经访问过的节点 # 使用集合是为了快速查找节点是否已经被访问过,避免重复访问 visited = set() # 初始化栈,将起始节点加入栈中 # 栈用于存储待访问的节点。栈的特性是后进先出( ...
把大的元素往后挪,最大的元素向右移到已排序的区域就像浮出水面,也就是 “冒泡”。
实践
1234567891011121314def BubbleSort(nums): nums = nums[:] # 创建副本,避免修改原始数据 for i in range(len(nums) - 1): # 最多 n-1 次就能完成排序 flag = False # 标记一下,如果这一轮下来还是 False 就说明没有交换,意味着已经排序好了 for j in range(len(nums) - i - 1): # 已经冒出水面的不用考虑 if nums[j] > nums[j + 1]: # 如果下一个数比当前的数小的话就交换,把大的往右移 nums[j], nums[j + 1] = nums[j + 1], nums[j] flag = True # 交换了就标记为 True ,后面继续排序 if not flag: # 如果已经排序好了就跳出循环直接返回 break return nums# 测试sort.test(BubbleSort)
...
把最小的元素往最前面挪,挪完了就不管前面的,只看后面没有挪过的,然后就这样一直循环下去直到排序完成。
实践
123456789101112def SelectionSort(nums): nums = nums[:] # 创建副本,避免修改原始数据 for i in range(len(nums) - 1): # 最多 n-1 次就能完成排序 k = i # 先设当前最小的元素的位置为未排序区间的第一个 for j in range(i+1, len(nums)): # 遍历未排序区间 if nums[j] < nums[k]: # 如果未排序区间里的某个数比第一个数小就暂时把它定为最小的,遍历完 k 自然就是最小的了 k = j nums[i], nums[k] = nums[k], nums[i] # 找到未排序区间里面最小的数之后就可以让它和未排序区间的第一个数交换,然后未排序区间就可以缩小了 return nums# 测试sort.test(SelectionSort)
1234567891011graph TD Start["Start: C ...
像是手动整理一副牌。
实践
123456789101112131415def InsertionSort(nums): # 像是手动整理一副牌 nums = nums[:] # 创建副本,避免修改原始数据 # 先设第一个数是排序好的,也就是说目前 [0] 是已排序区间 for i in range(1, len(nums)): # 遍历未排序区间,因此这里是从 1 开始的 base = nums[i] # 把未排序区间的第一个值定为基准值 j = i - 1 # j 是已排序区间的最后一个值的位置 while j >= 0 and nums[j] >= base: # 从右往左遍历已排序区间,当前位置的元素比基准值大就继续向左遍历 # 将已排序区间中要插入元素的位置右边的元素依次右移一位(腾出一个位置给 base ) nums[j + 1] = nums[j] j -= 1 nums[j + 1] = base # 将 base 插入到正确位置,当前 j 的位置是正确位置的前一个位置 return nums # 测试sort.test(Inser ...
下载软件
Keil_C51
STC-ISP
芯片手册
IAP15W4K58S4
手册下载链接:下载 PDF
串口位置
一些组件和引脚的对应关系
组件
标记
连接引脚
LED
DS1
P34
LED
DS2
P3
KEY
K1
P32
KEY
K2
P33
KEY
K3
P54
KEY
K4
P55
BUZZ
BUZZ
P45
添加 MCU 型号到 Keil 中
选择 Keil 的安装目录,且该目录下必须有 C51 目录和 UVx 目录存在。
Keil 新建项目
新建项目,起什么名字都行
新建文件
找个空白的地方,右键,然后单击上图位置,此时第一行会添加 #include <STC15F2K60S2.H> 。右键第一行能选择 Open document <STC15F2K60S2.H> 查看就说明头文件添加成功 (如下图)。
编译设置
点击上面的魔术棒
点击上面的 Output,选中 Create HEX File ,然后点击下面的 OK 保存,这样以后这个目录 {项目根目录}/Objects/ ...
CTF_WPs
未读原题及题解指路
USTC-Hackergame/hackergame2024-writeups: 中国科学技术大学第十一届信息安全大赛的官方与非官方题解
签到题
方法太多了,我是模拟输入过的。
喜欢做签到的 CTFer 你们好呀
根据题目有两个 flag 就藏在中国科学技术大学校内 CTF 战队的招新主页里那就前往招新主页,发现了一个像终端的页面。先 ls 一下找到了 Welcome-to-USTC-Nebula-s-Homepage/ 和 and-We-are-Waiting-for-U/ 这两个目录,再分别 ls 一下发现了 and-We-are-Waiting-for-U/ 下有.flag,但是尝试 cat 打开时发现没有权限。因此抓包,在这个 js 文件里找到了 2 个 flag 这一关键词。在第二个 “flag” 附近找到了这个东西 atob("ZmxhZ3swa18xNzVfYV9oMWRkM25fczNjM3J0X2YxNGdfX19wbGVhc2Vfam9pbl91c191c3RjX25lYnVsYV9hbkRfdHdvX21hSm9yX3JlcXVpcmVtZW50c ...
mi_band
未读整理自小米穿戴第三方 APP 能力开放接口文档
手环小程序开放接口文档
1.4 版本更新日志
兼容 Android R
1.3 版本更新日志
兼容未来小米穿戴和小米健康合并项目,api 无变化,直接替换 sdk 即可
1.2 版本更新日志:
兼容 jdk1.7 版本,api 没有变化
1.1 版本更新日志:
修改状态订阅和状态查询相关接口返回值,详情请查看文档 3.2 和 3.3 部分
增加消息通知 api,详情请看文档第 5 部分
1. 查询已连接的可穿戴设备(不需要权限)
12345678910111213141516171819// 获取 NodeApi 对象NodeApi api = Wearable.getNodeApi(context);// 调用 getConnectedNodes 方法来获取所有已连接的设备api.getConnectedNodes() .addOnSuccessListener(new OnSuccessListener<List<Node>>() { @Override publi ...
program_study
未读在线代码编辑器 Kotlin Playground
课程学习 Kotlin 编程语言
注释
单行注释
1// This is a comment
多行注释
1234/* * This is a very long comment that can * take up multiple lines. * /
输出
1println()
格式化输出例子:
1234fun main() { val cartTotal = 20 println("Total: $cartTotal")}
数据类型
来源: 在 Kotlin 中创建和使用变量 (google.cn)
数据类型
可包含的数据类型
字面量值示例
String
文本
"Add contact" "Search" "Sign in"
Int
整数
32 1293490 -59281
Double
小数
2.0 501.0292 -31723.99999
Float
小数(不如 Double 精确),数字末尾带有 f 或 F。 ...
program_study
未读课程链接
注释
//
输出
1console.log();
变量与常量
变量
var (少用)
let (常用)
1234let age = 30;age = 31;console.log(age);
输出结果
131
常量
const
需要在声明时赋值。本身不可变。若声明的是数组或对象,其内部元素可变,只是不能将整个数组或对象完全更改.
原生数据类型
string, number, boolean, null, undefined
123456789101112131415const username = 'John';const age = 30;const rate = 4.5; //整型和浮点型都是 Number 类型const isCool = true;const x = null;const y = undefined;let z;console.log(typeof username);console.log(typeof age);console.log(typeof rate);console.log(typeof isCool);console.log(typ ...