算法设计与分析 - 实验3 - 二叉查找树、红黑树的基本操作实现
实验3 二叉查找树、红黑树的基本操作实现
实验要求:
实现下列关于二叉查找树、红黑树的判断、构建、删除等操作。并写出这些操作的流程图或伪代码。
请说明二叉查找树和红黑树的区别以及时间、空间性能。
Pro1:Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than the node’s key.
The right subtree of a node contains only nodes with keys greater than the node’s key.
Both the left and right subtrees must also be binary search trees.
对应力扣题:98. 验证二叉搜索树
基本思路
由于BST的前两条性质,所以当遍历到某一个节 ...
Min-Max算法加Alpha-Beta剪枝优化研究 - 自动解2048
学习pygame的过程中,照着自己对2048游戏的理解,写了自己版本的2048游戏。于是自然地想是否能写一些算法让程序自动解2048呢?经过一番学习发现了Min-Max算法,令人高兴的是这个算法泛用性极佳,可以解决一大类的博弈问题。
游戏实现
2048游戏本体其实非常简单,只需要维护一个矩阵,实现矩阵的一个方向移动,其他方向的移动可以全部转换成已经实现的这一种移动就好了。使用pygame来显示这个矩阵,就完成了游戏程序。
卡片移动
这里我选择只实现左移操作。右移操作可以通过矩阵水平翻转变成左移操作,左移完再水平翻转回来;上移操作可以通过逆时针旋转90°转换为左移操作,左移完再顺时针旋转回来;下移操作同理。
左移的原理是:
去掉每一行中的所有0,这个操作会让所有非0的元素相互紧贴。
遍历剩余的每一行元素,将相邻的相同元素变为前一个是原本的两倍,后一个变为0。这个操作会将应当合并的数合并。
再次去掉剩余元素中因为步骤2带来的0元素,使得元素紧贴。
最后在末尾补齐0,让矩阵回到原本的大小,就完成了一次移动。
过程举例如图:
Game.py
123456789101112131415 ...
第十三届全国大学生智能汽车竞赛双车会车组心得
大三时候参加智能车,真的是非常正确的决定。结识了一大群极其优秀的小伙伴的同时,这一年内自己的技术也突飞猛进。
区赛决赛
区赛预赛
使用Unity3D制作一款类吸血鬼幸存者的3D游戏 - 角色篇
学习Unity3D过程中做的第一个项目,项目主体框架是照着这个教程做的:
https://www.youtube.com/playlist?list=PLFt_AvWsXl0ctd4dgE1F8g3uec4zKNRV0
后续增加了道具拾取以及升级的功能。
写这篇博客主要目的是将这个过程中学到的一些功能的典型实现摘出来,尽量避开记录这款游戏本身,而是讲解通用功能的实现。
(如果想复习这个特定游戏的开发,可以重新再看一遍教程)
本篇为系列的角色篇,目标是回顾完这一篇章之后可以做出来一个功能齐全的角色,经过一定程度的针对性扩展可以让这个角色出现在不同的游戏中。
1. 角色控制
给角色添加Collider以及Rigidbody,并在角色身上添加Player.cs,以后对于角色的按键输入都由Player.cs来处理。
记得锁定角色旋转以防角色“过分”的物理模拟。
为角色添加PlayerController.cs脚本,该脚本负责角色的移动。
PlayerController.cs
1234567891011121314151617Vector3 velocity;Rigidbody my ...









