# Play-with-Algorithm-Visualization **Repository Path**: malingzhao/Play-with-Algorithm-Visualization ## Basic Information - **Project Name**: Play-with-Algorithm-Visualization - **Description**: 学习看得见的算法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-07-26 - **Last Updated**: 2022-05-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 看得见的算法(第一季) - 课程官方代码仓 大家好, 欢迎大家来到我在[慕课网](http://www.imooc.com/)上的实战课程[《看得见的算法(第一季)》]()的官方代码仓。这个代码仓将不仅仅包含课程的所有源代码,还将发布课程的更新相关内容,勘误信息以及计划的更多可以丰富课程的内容,如更多分享,多多练习,等等等等。课程源码为Java语言源代码。关于更多语言的支持,今后有时间,我会慢慢更新这个代码仓(不过预计会是蜗牛速了>_<)。大家可以下载、运行、测试、修改。如果你发现了任何bug,或者对课程中的任何内容有意见或建议,欢迎和我联系:) **个人网站**:[liuyubobobo.com](http://liuyubobobo.com) [废弃重整中...] **电子邮件**:[liuyubobobo@gmail.com](mailto:liuyubobobo@gmail.com) **微博**: [刘宇波bobo http://weibo.com/liuyubobobo](http://weibo.com/liuyubobobo) **知乎**: [刘宇波 http://www.zhihu.com/people/liuyubobobo](http://www.zhihu.com/people/liuyubobobo) **知乎专栏:**[是不是很酷 https://zhuanlan.zhihu.com/liuyubobobo](https://zhuanlan.zhihu.com/liuyubobobo) **个人公众号:是不是很酷**:) ![qrcode](src/qrcode.png) ## 课程相关其他代码仓 * [**《玩转算法面试》课程**](https://coding.imooc.com/class/82.html), 代码仓: [Play-with-Algorithm-Interview](https://github.com/liuyubobobo/Play-with-Algorithm-Interview) * [**《玩转算法面试》课程**](https://coding.imooc.com/class/82.html), 代码仓: [Play-with-Algorithm-Interview](https://github.com/liuyubobobo/Play-with-Algorithm-Interview) * [**《玩转数据结构》课程**](https://coding.imooc.com/class/207.html), 代码仓: [Play-with-Data-Structures](https://github.com/liuyubobobo/Play-with-Data-Structures) * 我的**LeetCode题解代码仓**:[Play Leetcode](https://github.com/liuyubobobo/Play-Leetcode) (注:以C++实现为主) * **LeetCode Explore题解代码仓**:[Play Leetcode Explore](https://github.com/liuyubobobo/Play-Leetcode-Explore) (注:以C++实现为主) * [Leetcode Explore](https://leetcode.com/explore/) 是 Leetcode 在2017年底上线的新模块,分门别类地整理了Leetcode上的问题。如果刷Leetcode一时不知从哪里下手,可以从Leetcode Explore为指引开始:) ## 更多推荐 * 感谢学习课程的大佬 [**@田小号**](https://github.com/tianxiaohao1) 基于Canvas实现的迷宫可视化。有兴趣的同学可以去大佬的代码仓围观。同时,[**@田小号**](https://github.com/tianxiaohao1) 还基于Canvas实现了我的《修炼算法内功》和《玩转数据结构》两门课程中诸多算法和数据结构的可视化内容,大家不要错过! 代码仓传送门:[**https://github.com/tianxiaohao1/codding.cn/tree/master/algo**](https://github.com/tianxiaohao1/codding.cn/tree/master/algo) ![maze](src/fy.jpg) * 如果大家有学习这个课程后受启发,制作出的好的算法可视化的代码仓,也请联系我。**免费广告位在此预留:)** ## 课程源码目录 | 第一章 欢迎来到看得见的算法 | Java源码 | | :--- | :---: | | 1-1 欢迎来到看得见的算法 | [无代码] | | 1-2 学习这个课程将完成什么项目? | [无代码] | | 1-3 关于本课程的编程环境 | [无代码] | | 1-4 更多学习本课程的注意事项 | [无代码] | | **第二章 要想看得见,先要搞定GUI编程** | [章节Java代码](02-Java-Swing-Basics/) | | 2-1 使用JFrame | [Java](02-Java-Swing-Basics/01-About-Java-GUI/src/) | | 2-2 创建属于自己的第一个JFrame子类 | [Java](02-Java-Swing-Basics/02-Your-First-JFrame/src/) | | 2-3 设置画布与图形绘制基础 | [Java](02-Java-Swing-Basics/03-Rendering-Basics/src/) | | 2-4 使用Graphics2D | [Java](02-Java-Swing-Basics/04-Using-Graphics2D/src/) | | 2-5 整理绘制工具类 | [Java](02-Java-Swing-Basics/05-Drawing-Refactor/src/) | | 2-6 高级绘制特性:抗锯齿和双缓存 | [Java](02-Java-Swing-Basics/06-Advanced-Rendering/src/) | | 2-7 动画基础 | [Java](02-Java-Swing-Basics/07-Animation-Basics/src/) | | 2-8 算法可视化中的MVC | [Java](02-Java-Swing-Basics/08-MVC-in-Algorithm-Visualization/src/) | | 2-9 键盘事件 | [Java](02-Java-Swing-Basics/09-Keyboard-Event/src/) | | 2-10 鼠标事件 | [Java](02-Java-Swing-Basics/10-Mouse-Event/src/) | | 2-11 课程所使用的GUI编程模板 | [Java](02-Java-Swing-Basics/11-Templates/src/) | | 第二章完整代码 | [Java](02-Java-Swing-Basics/Chapter-02-Completed-Codes/) | | **第三章 概率模拟算法** | [章节Java代码](03-Probability-Simulation/) | | 3-1 一个有意思的分钱模拟问题 | [Java](03-Probability-Simulation/01-A-Money-Experiment-Basics/src/) | | 3-2 深入随机分钱问题 | [Java](03-Probability-Simulation/02-More-about-the-Money-Experiment/src/) | | 3-3 蒙特卡洛算法 | [Java](03-Probability-Simulation/03-Monte-Carlo-Simulation/src/) | | 3-4 使用蒙特卡洛算法求PI值 | [Java](03-Probability-Simulation/04-Get-PI-with-Monte-Carlo/src/) | | 3-5 不需要可视化的蒙特卡洛模拟 | [Java](03-Probability-Simulation/05-Pi-Estimation-Without-Rendering/src/) | | 3-6 三门问题 | [Java](03-Probability-Simulation/06-Three-Gates-Problem/src/) | | 3-7 你一定能中奖吗? | [Java](03-Probability-Simulation/07-Winning-the-Prize/src/) | | 第三章完整代码 | [Java](03-Probability-Simulation/Chapter-03-Completed-Codes/) | | **第四章 排序算法可视化** | [章节Java代码](04-Sort-Visualization/) | | 4-1 选择排序算法可视化 | [Java](04-Sort-Visualization/01-Selection-Sort-Visualization/src/) | | 4-2 为可视化添加更多效果 | [Java](04-Sort-Visualization/02-More-about-Selection-Sort-Visualization/src/) | | 4-3 插入排序可视化 | [Java](04-Sort-Visualization/03-Insertion-Sort-Visualization/src/) | | 4-4 在近乎有序的数据上测试插入排序算法 | [Java](04-Sort-Visualization/04-Insertion-Sort-with-Nearly-Ordered-Array/src/) | | 4-5 通过归并排序算法深入理解递归 | [Java](04-Sort-Visualization/05-Merge-Sort-More-Explanations/) | | 4-6 归并排序算法可视化 | [Java](04-Sort-Visualization/06-Merge-Sort-Visualization/) | | 4-7 快速排序算法可视化 | [Java](04-Sort-Visualization/07-Quick-Sort-Visualization/src/) | | 4-8 在快速排序中随机选取标定点 | [Java](04-Sort-Visualization/08-Quick-Sort-Visualization-with-Random-Pivot/src/) | | 4-9 双路快速排序算法可视化 | [Java](04-Sort-Visualization/09-Two-Ways-Quick-Sort-Visualization/) | | 4-10 三路快速排序算法可视化 | [Java](04-Sort-Visualization/10-Three-Ways-Quick-Sort-Visualization/src/) | | 4-11 堆排序算法可视化 | [Java](04-Sort-Visualization/11-Heap-Sort-Visualization/src/) | | 第四章完整代码 | [Java](04-Sort-Visualization/Chapter-04-Completed-Codes/) | | **第五章 走迷宫** | [章节Java代码](05-Maze-Solver/) | | 5-1 处理迷宫文件 | [Java](05-Maze-Solver/01-Maze-Files-Processing/src/) | | 5-2 迷宫可视化 | [Java](05-Maze-Solver/02-Maze-Visualization/src/) | | 5-3 迷宫问题和图的遍历 | [无代码] | | 5-4 深度优先递归走迷宫 | [Java](05-Maze-Solver/04-DFS-Maze-Solver/src/) | | 5-5 迷宫问题与回溯法 | [Java](05-Maze-Solver/05-More-about-DFS-Maze-Solver/src/) | | 5-6 非递归深度优先走迷宫 | [Java](05-Maze-Solver/06-Non-Recursive-DFS-Maze-Solver/src/) | | 5-7 非递归深度优先走迷宫求解最终路径 | [Java](05-Maze-Solver/07-More-about-Non-Recursive-DFS-Maze-Solver/src/) | | 5-8 广度优先走迷宫问题 | [Java](05-Maze-Solver/08-BFS-Maze-Solver/src/) | | 5-9 深度优先遍历和广度优先遍历的内在联系 | [无代码] | | 第五章完整代码 | [Java](05-Maze-Solver/Chapter-05-Completed-Codes/) | | **第六章 随机迷宫生成** | [章节Java代码](06-Maze-Generalization/) | | 6-1 什么是迷宫 | [无代码] | | 6-2 生成迷宫基础 | [Java](06-Maze-Generalization/02-Maze-Generalization-Basics/src/) | | 6-3 深度优先遍历生成迷宫 | [Java](06-Maze-Generalization/03-DFS-Maze-Generalization/src/) | | 6-4 非递归深度优先遍历生成迷宫 | [Java](06-Maze-Generalization/04-Non-Recursive-DFS-Maze-Generalization/src/) | | 6-5 广度优先遍历生成迷宫 | [Java](06-Maze-Generalization/05-BFS-Maze-Generalization/src/) | | 6-6 随机队列生成迷宫 | [Java](06-Maze-Generalization/06-Random-Maze-Generalization/src/) | | 6-7 迷宫生成的迷雾效果 | [Java](06-Maze-Generalization/07-Random-Maze-Generalization-with-Mist/src/) | | 6-8 生成随机性更强的迷宫 | [Java](06-Maze-Generalization/08-More-about-Random-Maze-Generalization/) | | 6-9 更多迷宫问题 | [无代码] | | 第六章完整代码 | [Java](06-Maze-Generalization/Chapter-06-Completed-Codes/) | | **第七章 自己做一个扫雷游戏** | [章节Java代码](07-Mine-Sweeper/) | | 7-1 扫雷是什么鬼?扫雷里包含什么算法? | [无代码] | | 7-2 扫雷代码基础 | [Java](07-Mine-Sweeper/02-Mine-Sweeper-Basics/src/) | | 7-3 随机生成雷区 | [Java](07-Mine-Sweeper/03-Mine-Sweeper-Board-Generation/) | | 7-4 验证随机生成雷区算法的随机性 | [Java](07-Mine-Sweeper/04-Verify-the-Shuffle-Algorithms/) | | 7-5 Fisher-Yates洗牌算法的应用 | [Java](07-Mine-Sweeper/05-Knuth-Shuffle/) | | 7-6 为扫雷程序加入交互 | [Java](07-Mine-Sweeper/06-Interactions-in-Mine-Sweeper/) | | 7-7 扫雷与floodfill算法 | [Java](07-Mine-Sweeper/07-Floodfill-in-Mine-Sweeper/) | | 7-8 更多扫雷相关和floodfill算法的应用 | [无代码] | | 第七章完整代码 | [Java](07-Mine-Sweeper/Chapter-07-Completed-Codes/) | | **第八章 益智游戏自动生成解 - Move the Box** | [章节Java代码](08-Move-the-Box-Solver/) | | 8-1 玩一玩Move the Box | [无代码] | | 8-2 求解Move the Box的数据架构 | [Java](08-Move-the-Box-Solver/02-Move-the-Box-Data/src/) | | 8-3 求解Move the Box的渲染 | [Java](08-Move-the-Box-Solver/03-Move-the-Box-Solver-Rendering/src/) | | 8-4 搜索框架 | [Java](08-Move-the-Box-Solver/04-Backtrack-to-Solve-Move-the-Box/src/) | | 8-5 处理箱子掉落过程 | [Java](08-Move-the-Box-Solver/05-Drop/src/) | | 8-6 处理箱子消除过程 | [Java](08-Move-the-Box-Solver/06-Match/src/) | | 8-7 显示问题的解 | [Java](08-Move-the-Box-Solver/07-Show-the-Results/src/) | | 8-8 更多搜索优化思路 | [无代码] | | 8-9 更多人工智能相关 | [无代码] | | 第八章完整代码 | [Java](08-Move-the-Box-Solver/Chapter-08-Completed-Codes/) | | 补充代码1: 求解过程加交互 | [Java](08-Move-the-Box-Solver/Optional-01-Move-the-Box-Solver-with-Interactions/src/) | | 补充代码2: 使用HashSet求解 | [Java](08-Move-the-Box-Solver/Optional-02-Move-the-Box-Solver-Using-HashSet/src/) | | **第九章 分形图的绘制:计算机生成艺术** | [章节Java代码](09-Fractal-Drawing/) | | 9-1 分形到底是什么鬼 | [无代码] | | 9-2 递归绘制基础 | [Java](09-Fractal-Drawing/02-Recursive-Circle-Drawing/src/) | | 9-3 Vicsek 分形图的绘制 | [Java](09-Fractal-Drawing/03-Vicsek-Fractal/src/) | | 9-4 为分形绘制添加交互 | [Java](09-Fractal-Drawing/04-Fractal-with-Interaction/src/) | | 9-5 Sierpinski 分形绘制 | [Java](09-Fractal-Drawing/05-Sierpinski-Carpet/src/) | | 9-6 Sierpinski 三角形 | [Java](09-Fractal-Drawing/06-Sierpinski-Triangle/src/) | | 9-7 Koch雪花分形背后的数学分析 | [无代码] | | 9-8 编写Koch雪花分形 | [Java](09-Fractal-Drawing/08-Snowflake-Fractal/src/) | | 9-9 利用分形绘制树 | [Java](09-Fractal-Drawing/09-Tree-Fractal/src/) | | 第九章完整代码 | [Java](09-Fractal-Drawing/Chapter-09-Completed-Codes/) | | 补充代码1: 另一种Vicsek分形 | [Java](09-Fractal-Drawing/Optional-01-Another-Vicsek-Fractal/src/) | | **第十章 看得见的算法,下季再见!** | [无代码] | | 10-1 看得见的算法,下一季再见! | [无代码] | --- * 做这个课程的时候,一气儿设想了20多个demo,用来展示算法的实际运用。本以为是个很好的选题,毕竟大家平时使用算法都过于抽象。如果可能,这个选题可以出好几季,让大家真正做到“看见”这些算法。但是没想到课程推出以后,销量非常差。所以这个课程的后几季的制作计划暂时只能暂停。请谅解。 * **但这个课程本身依然自成体系,是我在慕课网做过的课程中,最喜欢的课程。也相信非常值得大家学习。希望大家喜欢。万一,只是万一,这个课程在以后的时间里突然火起来了,慕课网肯定会联系我做第二季第三季的:)** * **课程讲义的PDF版本不在github上提供**,大家可以在慕课网上 "下载 -> 查看讲师源码" 中各个章节文件夹下找到。 * **大家加油!:)**