|
|
|
@ -95,37 +95,127 @@ int Random::poisson(double mean)
|
|
|
|
|
|
|
|
|
|
## 2.2 数据结构设计
|
|
|
|
|
|
|
|
|
|
首先,分析对比几种可选的数据结构设计方案。如图可以采用邻接矩阵,也可以采用邻接表,表示集合可以用普通的查找表,还可以用不相交集。给出每一种设计方案的特点(优势、不足等)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
|
|
|
|
|
以下是用到的数据结构:
|
|
|
|
|
|
|
|
|
|
### (1)xxx结构
|
|
|
|
|
飞机:设计一个结构体或类来表示飞机,包括飞机的编号、起降状态、起飞时间、降落时间、所属航班等信息。
|
|
|
|
|
|
|
|
|
|
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。多个数据结构,逐一列出。
|
|
|
|
|
航线:设计一个结构体或类来表示航线,包括航班编号、起降机场、航班状态、预计起飞时间、预计降落时间等信息。
|
|
|
|
|
|
|
|
|
|
### (2)xxx结构
|
|
|
|
|
排队队列:设计一个队列结构来存储飞机的起飞或降落排队队列信息。
|
|
|
|
|
|
|
|
|
|
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。
|
|
|
|
|
|
|
|
|
|
###
|
|
|
|
|
栈:用来存储已经起飞或降落的飞机信息,方便回退操作。
|
|
|
|
|
|
|
|
|
|
###(1)queue队列结构
|
|
|
|
|
设计一个队列结构来存储飞机的起飞或降落排队队列信息。
|
|
|
|
|
```
|
|
|
|
|
queue <struct plane> q1; //q1是准备降落的飞机队列
|
|
|
|
|
queue <struct plane> q2; //q2是准备起飞的飞机队列
|
|
|
|
|
```
|
|
|
|
|
###(2)Random结构
|
|
|
|
|
生成随机数:
|
|
|
|
|
```
|
|
|
|
|
class Random{
|
|
|
|
|
public:
|
|
|
|
|
Random(bool pseudo=true);
|
|
|
|
|
double random_real();
|
|
|
|
|
int poisson(double mean);
|
|
|
|
|
private:
|
|
|
|
|
int reseed();
|
|
|
|
|
int seed,
|
|
|
|
|
multiplier,add_on;
|
|
|
|
|
};
|
|
|
|
|
```
|
|
|
|
|
###(3)plane结构
|
|
|
|
|
```
|
|
|
|
|
struct plane{
|
|
|
|
|
int name;
|
|
|
|
|
int in_queue_time;
|
|
|
|
|
} plane;
|
|
|
|
|
```
|
|
|
|
|
## 2.3 算法设计
|
|
|
|
|
|
|
|
|
|
首先,分析对比几种可选的算法设计方案。如是否排序,广度优先或深度优先搜索等。给出每一种设计方案的特点(优势、不足)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
|
|
|
|
|
|
|
|
|
|
### (1)XXX算法
|
|
|
|
|
|
|
|
|
|
给出核心算法的设计,包括伪代码或流程图。多个核心算法,逐一列出。只列举解决问题的核心算法,重点讲清楚是如何解决问题的。
|
|
|
|
|
### (1)泊松分布实现随机数生成算法
|
|
|
|
|
```
|
|
|
|
|
class Random{
|
|
|
|
|
public:
|
|
|
|
|
Random(bool pseudo=true);
|
|
|
|
|
double random_real();
|
|
|
|
|
int poisson(double mean);
|
|
|
|
|
private:
|
|
|
|
|
int reseed();
|
|
|
|
|
int seed,
|
|
|
|
|
multiplier,add_on;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
### (2)XXX算法
|
|
|
|
|
int Random::reseed()
|
|
|
|
|
{
|
|
|
|
|
seed=seed*multiplier + add_on;
|
|
|
|
|
return seed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
给出核心算法的设计,包括伪代码或流程图。
|
|
|
|
|
Random::Random(bool pseudo)
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
if(pseudo)
|
|
|
|
|
seed=1;
|
|
|
|
|
else
|
|
|
|
|
seed=time(NULL)%INT_MAX;
|
|
|
|
|
multiplier=2743;
|
|
|
|
|
add_on=5923;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double Random::random_real()
|
|
|
|
|
{
|
|
|
|
|
double max=INT_MAX + 1.0;
|
|
|
|
|
double temp=reseed();
|
|
|
|
|
if(temp<0)
|
|
|
|
|
temp=temp+max;
|
|
|
|
|
return temp/max;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int Random::poisson(double mean)
|
|
|
|
|
{
|
|
|
|
|
double limit=exp(-mean);
|
|
|
|
|
double product=random_real();
|
|
|
|
|
int count=0;
|
|
|
|
|
while(product>limit){
|
|
|
|
|
count++;
|
|
|
|
|
product*=random_real();
|
|
|
|
|
}
|
|
|
|
|
return count;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
### (2)排队算法
|
|
|
|
|
```
|
|
|
|
|
if(!q1.empty()){
|
|
|
|
|
temp=q1.front();
|
|
|
|
|
wait_time=i-temp.in_queue_time-1;
|
|
|
|
|
come_wait_time+=wait_time;
|
|
|
|
|
printf("\n\n##%d号时间##\n%d号飞机降落了,等了%d个单位时间。\n", i, temp.name , wait_time);
|
|
|
|
|
q1.pop();
|
|
|
|
|
}
|
|
|
|
|
else if(!q2.empty()){
|
|
|
|
|
temp=q2.front();
|
|
|
|
|
wait_time=i-temp.in_queue_time-1;
|
|
|
|
|
go_wait_time+=wait_time;
|
|
|
|
|
printf("\n\n##%d号时间##\n%d号飞机飞走了,等了%d个单位时间。\n", i, temp.name , wait_time);
|
|
|
|
|
q2.pop();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
printf("\n\n##%d号时间##\n没有飞机降落,也没有飞机起飞,此时跑道为空。\n",i);
|
|
|
|
|
spare_time++;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
# 3. 系统实现
|
|
|
|
|
|
|
|
|
|
说明所使用的语言、开发工具等。
|
|
|
|
|
|
|
|
|
|
介绍项目的文件结构,以及主要函数的功能。
|
|
|
|
|
# 3. 系统实现
|
|
|
|
|
#####系统使用C++语言进行开发,使用VScode作为开发工具。
|
|
|
|
|
#####项目的文件结构如下:
|
|
|
|
|
c.cpp:主程序文件,包含程序的主函数和主要逻辑。
|
|
|
|
|
README.md:项目文档,包含程序的介绍和使用说明。
|
|
|
|
|
|
|
|
|
|
## 3.1 核心数据结构的实现
|
|
|
|
|
|
|
|
|
@ -169,52 +259,125 @@ void bubble_sort(T a[], int n)
|
|
|
|
|
# 4. 系统测试
|
|
|
|
|
```
|
|
|
|
|
——————————————————————————————————————————————
|
|
|
|
|
|请输入飞机场运行的时间。
|
|
|
|
|
|3
|
|
|
|
|
|请输入降落和起飞队列最多容纳的飞机数。
|
|
|
|
|
|3
|
|
|
|
|
|请输入平均每个单位时间请求降落的飞机数。
|
|
|
|
|
|3
|
|
|
|
|
|请输入平均每个单位时间请求起飞的飞机数。
|
|
|
|
|
|3
|
|
|
|
|
——————————————————————————————————————————————
|
|
|
|
|
——————————————————————————————————————————————
|
|
|
|
|
|##0号时间##
|
|
|
|
|
|没有飞机降落,也没有飞机起飞,此时跑道为空。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|##1号时间##
|
|
|
|
|
|没有飞机降落,也没有飞机起飞,此时跑道为空。
|
|
|
|
|
|0号飞机请求降落,并进入降落队伍。
|
|
|
|
|
|1号飞机请求降落,并进入降落队伍。
|
|
|
|
|
|2号飞机请求降落,并进入降落队伍。
|
|
|
|
|
|3号飞机请求降落但被拒绝了。
|
|
|
|
|
|4号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|5号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|6号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|7号飞机请求起飞但被拒绝了。
|
|
|
|
|
|8号飞机请求起飞但被拒绝了。
|
|
|
|
|
|9号飞机请求起飞但被拒绝了。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|##2号时间##
|
|
|
|
|
|0号飞机降落了,等了0个单位时间。
|
|
|
|
|
|历经3个单位时间,机场停止接收请求。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|一共收到了10架飞机的请求。
|
|
|
|
|
|一共有4架请求降落。其中有3架被接受了,1架被拒绝了。
|
|
|
|
|
|一共有6架请求起飞。其中有3架被接受了,3架被拒绝了。
|
|
|
|
|
|
|
|
|
|
|
|成功降落了1架,还有2架在排队等待降落。
|
|
|
|
|
|成功起飞了0架,还有3架在排队等待起飞
|
|
|
|
|
|
|
|
|
|
|
|轨道有66.67%的时间是空闲的。
|
|
|
|
|
|降落平均要等0.00个单位时间。
|
|
|
|
|
|起飞平均要等0.00个单位时间。
|
|
|
|
|
|
|
|
|
|
|
|这个机场平均每个单位时间收到1.33个降落请求。
|
|
|
|
|
|这个机场平均每个单位时间收到2.00个起飞请求。
|
|
|
|
|
请输入飞机场运行的时间。
|
|
|
|
|
20
|
|
|
|
|
请输入降落和起飞队列最多容纳的飞机数。
|
|
|
|
|
5
|
|
|
|
|
请输入平均每个单位时间请求降落的飞机数。
|
|
|
|
|
0.4
|
|
|
|
|
请输入平均每个单位时间请求起飞的飞机数。
|
|
|
|
|
0.5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##0号时间##
|
|
|
|
|
没有飞机降落,也没有飞机起飞,此时跑道为空。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##1号时间##
|
|
|
|
|
没有飞机降落,也没有飞机起飞,此时跑道为空。
|
|
|
|
|
0号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##2号时间##
|
|
|
|
|
0号飞机飞走了,等了0个单位时间。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##3号时间##
|
|
|
|
|
没有飞机降落,也没有飞机起飞,此时跑道为空。
|
|
|
|
|
1号飞机请求降落,并进入降落队伍。
|
|
|
|
|
2号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##4号时间##
|
|
|
|
|
1号飞机降落了,等了0个单位时间。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##5号时间##
|
|
|
|
|
2号飞机飞走了,等了1个单位时间。
|
|
|
|
|
3号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##6号时间##
|
|
|
|
|
3号飞机飞走了,等了0个单位时间。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##7号时间##
|
|
|
|
|
没有飞机降落,也没有飞机起飞,此时跑道为空。
|
|
|
|
|
4号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##8号时间##
|
|
|
|
|
4号飞机飞走了,等了0个单位时间。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##9号时间##
|
|
|
|
|
没有飞机降落,也没有飞机起飞,此时跑道为空。
|
|
|
|
|
5号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
6号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##10号时间##
|
|
|
|
|
5号飞机飞走了,等了0个单位时间。
|
|
|
|
|
7号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##11号时间##
|
|
|
|
|
6号飞机飞走了,等了1个单位时间。
|
|
|
|
|
8号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
9号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##12号时间##
|
|
|
|
|
7号飞机飞走了,等了1个单位时间。
|
|
|
|
|
10号飞机请求降落,并进入降落队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##13号时间##
|
|
|
|
|
10号飞机降落了,等了0个单位时间。
|
|
|
|
|
11号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##14号时间##
|
|
|
|
|
8号飞机飞走了,等了2个单位时间。
|
|
|
|
|
12号飞机请求降落,并进入降落队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##15号时间##
|
|
|
|
|
12号飞机降落了,等了0个单位时间。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##16号时间##
|
|
|
|
|
9号飞机飞走了,等了4个单位时间。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##17号时间##
|
|
|
|
|
11号飞机飞走了,等了3个单位时间。
|
|
|
|
|
13号飞机请求降落,并进入降落队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##18号时间##
|
|
|
|
|
13号飞机降落了,等了0个单位时间。
|
|
|
|
|
14号飞机请求起飞,并进入起飞队伍。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##19号时间##
|
|
|
|
|
14号飞机飞走了,等了0个单位时间。
|
|
|
|
|
历经20个单位时间,机场停止接收请求。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
一共收到了15架飞机的请求。
|
|
|
|
|
一共有4架请求降落。其中有4架被接受了,0架被拒绝了。
|
|
|
|
|
一共有11架请求起飞。其中有11架被接受了,0架被拒绝了。
|
|
|
|
|
|
|
|
|
|
成功降落了4架,还有0架在排队等待降落。
|
|
|
|
|
成功起飞了11架,还有0架在排队等待起飞
|
|
|
|
|
|
|
|
|
|
轨道有25.00%的时间是空闲的。
|
|
|
|
|
降落平均要等0.00个单位时间。
|
|
|
|
|
起飞平均要等0.60个单位时间。
|
|
|
|
|
|
|
|
|
|
这个机场平均每个单位时间收到0.20个降落请求。
|
|
|
|
|
这个机场平均每个单位时间收到0.55个起飞请求。
|
|
|
|
|
————————————————————————————————————————————————————————
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|