- 一. 前言
- 二. JAVA
- (一). 作业
- 1.
- (二). 有趣代码
- 1.
- (三). 我的小黄鸭
- 1.
- 三. 数据结构与算法
- (一). 作业
- 1.
- (二). 有趣代码
- 1.
- (三). 我的小黄鸭
- 1.Floyd算法
- 四. 操作系统
- (一). 作业
- 1. 第4章 进程调度与死锁在线作业
- 五. LUA脚本语言(ReWord游戏开发)
- (一).有趣小代码
- 1.
- (二). 面向对象
- 1.
- (三). 自定义开发框架
- 1. 函数式框架
- 六.其它
分享一些自己的作业内容,和自己的课外学习的一点有趣的东西, 欢迎参考借鉴批评.
二. JAVA (一). 作业 1.
(二). 有趣代码 1. (三). 我的小黄鸭 1.
三. 数据结构与算法 (一). 作业 1. (二). 有趣代码 1. (三). 我的小黄鸭 1.Floyd算法
-
应用方向:
多源最短路径 -
思路:
转载自Ouyang_Lianjun的博客
https://blog.csdn.net/qq_35644234/article/details/60875818
其实核心思路就是用每个节点充当桥梁连接两点, 进而来刷新任意两个点的最短距离, 当所有点都被充当过桥梁后自然所有点之间的距离最短了. -
代码示例:
// 测试数据 // 7 // 0 12 -1 -1 -1 -1 14 // 12 0 10 -1 -1 7 -1 // -1 10 0 3 5 6 -1 // -1 -1 3 0 4 -1 -1 // -1 -1 5 4 0 2 8 // 16 7 6 -1 2 0 9 // 14 -1 -1 -1 -1 9 0 #include
using namespace std; typedef long long ll; #define N 450 ll graph[N][N]; // 邻接矩阵 // O(pow(n, 3)), 适用数据量在 1 <= n * n <= 2 * 1e5 void floyd(int n) { for (int k = 0; k < n; ++ k) // 中转点 for (int i = 0; i < n; ++ i) // 行 for (int j = 0; j < n; ++ j) // 列 graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j]); // 刷新最短距离, 注意不要越界 } int main() { int n; cin >> n; // 建图 for (int i = 0; i < n; ++ i) for (int j = 0; j < n; ++ j) { cin >> graph[i][j]; graph[i][j] = (graph[i][j] == -1 ? INT_MAX: graph[i][j]); } // 计算 floyd(n); // 输出 cout << "最短距离:" << endl; for (int i = 0; i < n; ++ i) for (int j = 0; j < n; ++ j) cout << i + 1 << " -> " << j + 1 << " = " << graph[i][j] << endl; return 0; } -
测试数据:
7
0 12 -1 -1 -1 -1 14
12 0 10 -1 -1 7 -1
-1 10 0 3 5 6 -1
-1 -1 3 0 4 -1 -1
-1 -1 5 4 0 2 8
16 7 6 -1 2 0 9
14 -1 -1 -1 -1 9 0 -
运行结果:
在g++(std = c++11)编译通过
-
解析:
测试数据图:
使用邻接矩阵存储
A => A 的距离为0, A => B 的距离为12, A => C 的距离为-1(表示无穷, 因目前还不知道具体距离), A => D 的距离-1, A=> E 的距离-1, A => F 的距离16, A => G 的距离14;
B => A 的距离12, B => B 的距离0, B => C 的距离10, B => D 的距离-1, B => E 的距离-1, B => F 的距离7, B => G 的距离-1,;
其余依次推即可得到测试数据
时间复杂度
O(n^3), n为节点数, 例如上图的点 A~G
四. 操作系统 (一). 作业 1. 第4章 进程调度与死锁在线作业
总得分: 80.0 一.单选题(共10题,50.0分) 1.在为多道程序所提供的可共享的系统资源不足时,可能出现死锁,但是,不适当的( )也可能产生死锁。 A、进程优先权 B、资源的线性分配 C、进程推进顺序 D、分配队列优先权 正确答案: C 我的答案:C得分: 5.0分 2.进程调度是从( )选择一个进程投入运行。 A、就绪队列 B、等待队列 C、作业后备队列 D、提交队列 正确答案: A 我的答案:A得分: 5.0分 3.银行家算法是一种( )算法。 A、死锁解除 B、 死锁避免 C、死锁预防 D、死锁检测 正确答案: B 我的答案:B得分: 5.0分 4.( )优先权是在创建进程时确定的,确定之后在整个进程运行期间不再改变。 A、先来先服务 B、静态 C、动态 D、短作业 正确答案: B 我的答案:B得分: 5.0分 5.操作系统的作业管理是一种( )。 A、宏观的高级管理 B、宏观的低级管理 C、系统刚开始加电 D、初始化引导完毕 正确答案: A 我的答案:A得分: 5.0分 6.作业调度的关键在于( )。 A、选择恰当的进程管理程序 B、选择恰当的作业调度算法 C、用户作业准备充分 D、用一个较好的操作环境 正确答案: B 我的答案:A得分: 0.0分 7.为了对紧急进程或者重要进程进行调度,调度算法应采用( )。 A、先来先服务法 B、短作业优先法 C、时间片轮转法 D、优先级法 正确答案: D 我的答案:D得分: 5.0分 8.在操作系统中,( )负责对进程进行调度。 A、处理机管理 B、作业管理 C、高级调度管理 D、存储和设备管理 正确答案: A 我的答案:A得分: 5.0分 9.两个进程争夺同一个资源( )。 A、一定死锁 B、不一定死锁 C、不死锁 D、以上说法都不对 正确答案: B 我的答案:B得分: 5.0分 10.在非剥夺调度方式下,运行进程执行V原语后,其状态( )。 A、不变 B、要变 C、可能要变 D、可能不变 正确答案: A 我的答案:C得分: 0.0分 二.判断题(共10题,50.0分) 1.对信号量S的P-V操作的含义是:P(S)是释放资源,V(S)是申请资源。 我的答案:× 得分: 5.0分正确答案:× 2.一般而言,由于操作系统的并行与共享以及随机性等特点,通过预防与避免的手段达到排除死锁的目的是一件非常困难的事情。 我的答案:√ 得分: 5.0分正确答案:√ 3.对于并发进程,同步与互斥是一个必要条件。 我的答案:× 得分: 0.0分正确答案:√ 4.进程调度属于高级调度。 我的答案:× 得分: 5.0分正确答案:× 5.吞吐量是指系统在单位时间内所完成的作业或者进程的数量。 我的答案:√ 得分: 5.0分正确答案:√ 6.CPU利用率是指CPU空闲时间与总的运行时间的比值。 我的答案:× 得分: 5.0分正确答案:× 7.每个作业的加权周转时间定义该作业的周转时间与该作业的提交时间的比值。 我的答案:× 得分: 5.0分正确答案:× 8.打印机是可剥夺的一种资源。 我的答案:√ 得分: 0.0分正确答案:× 9.若某一时刻系统中不存在一个安全序列,则称此时的系统状态为不安全状态。 我的答案:√ 得分: 5.0分正确答案:√ 10.系统的每个进程对各种资源的仍然需求数量等于每个进程对各种资源最大需求量与已经给该进程分配的资源数量的差值。 我的答案:√ 得分: 5.0分正确答案:√
错误分析:
原语一旦开始执行,就要连续执行完,不允许中断
并发一定需要同步和互斥相互配合
打印机不是可剥夺的一种资源
五. LUA脚本语言(ReWord游戏开发) (一).有趣小代码 1. (二). 面向对象 1. (三). 自定义开发框架 1. 函数式框架
- 请访问我的网站
https://myrainbowcolor.github.io/Rworlder/#/
六.其它



