重写了sstfgetquery函数

This commit is contained in:
nvhaizi1 2022-06-04 16:12:31 +08:00
parent 56e97ae4db
commit d2e515902f

View File

@ -71,62 +71,43 @@ bus_query_t *FCFSQuery()
bus_query_t *SSTFGetQuery() bus_query_t *SSTFGetQuery()
{ {
int a,b,length,min; // 当前没有请求
a = the_bus->rail_node_pos->id; //是当前公交车的位置,而不是站点位置,应该两者差别不大 if(queries == NULL)
b = rails->last_node->id;//总的站点数
if (a >= 1 && a <= (b/2))//判断当前站点的位置
{ {
if (abs(a+b-queries->node->id) < abs(a-queries->node->id) ) //因为是环形轨道用id相减的方式来计算距离的话相减的方法不同 return NULL;
{
min = abs(a+b-queries->node->id);
}
else
{
min = abs(a-queries->node->id);
}
} }
else if (a > (b/2) && a <=b) int distance = 9999;
bus_query_t *query = NULL;
bus_query_t *p = queries;
// 遍历顺时针方向
// 在两个方向路程相同时选择顺时针方向
// 所以先遍历顺时针方向
while (p != NULL)
{ {
if (abs(queries->node->id+b-a) < abs(a-queries->node->id)) int temp = GetQueryDistance(p, BUS_CLOCK_WISE);
if(temp < distance)
{ {
min = abs(queries->node->id+b-a); distance = temp;
} query = p;
else
{
min = abs(a-queries->node->id);
} }
p = p->next_node;
} }
//通过上诉把第一个请求的距离置为最小值min
bus_query_t *p = queries->next_node; // 遍历逆时针方向
bus_query_t *result = queries;//如果第一个请求即最近的那一个result=第一个请求 p = queries;
while (p->time <= bus_time)//在当前的时间找到所有请求中最近的一个 while (p != NULL)
{ {
if (a >= 1 && a <= (b/2))//对当前站点所在的位置进行分类讨论 int temp = GetQueryDistance(p, BUS_COUNTER_CLOCK_WISE);
if(temp < distance)
{ {
if (abs(a+b-p->node->id) <= abs(a-p->node->id) ) distance = temp;
{ query = p;
if(min >= abs(a+b-p->node->id))
{
min = abs(a+b-p->node->id);
result = p;//把最小距离所对应的请求指针传给result
p = p->next_node;
}
}
}
else if (a > (b/2) && a <=b)
{
if (abs(p->node->id+b-a) <= abs(a-p->node->id))
{
if (min >= abs(p->node->id+b-a))
{
min = abs(p->node->id+b-a);
result = p;
p = p->next_node;
}
}
} }
p = p->next_node;
} }
return result;//需不需要返回空指针的情况呢?
return query;
} }
int SSTFDirection(bus_query_t* query) int SSTFDirection(bus_query_t* query)