关于艾斯纳 K.A.A.I. 程序故障的说明

在上一周,我们收到了来自我们的客户关于K.A.A.I.的投诉,在程序更新后生成的随机安排表中,出现同一人在一天同一时段被同时安排到两个班级的情况。经过开发人员的紧急排查,目前已经在V3.1程序中修正。关于这个问题,现作说明如下:

为了节省生成用计算机的内存空间,对安排使用如下方式存储:
struct member{
string name;
int ownclass;
bool inUse;
vector listed;
};

struct array{
vector arrange;
};

通过使用 vector,可以有效减少内存占用。然而,当新的安排被生成时,是这样存储的:
if(avalible){
schedule[i].arrange.push_back(student[tmp].name);
student[tmp].inUse=1;
student[tmp].listed.push_back(j);
sort(student[tmp].listed.begin(), student[tmp].listed.end());
cnt=0;
}

因此,每一个安排被存储时,会将被安排人员的名字插入到队列末尾。但是,因随机函数生成的结果有时会导致不存在可能解的情况,在尝试次数过多时,程序会抛弃当前时段已经完成的排班,重新生成当日的安排。
出现问题的代码段如下:
if(time_out){
j=-1;
for(int k=0; k<num_students; k++){
student[k].inUse=0;
}

因为没有清除当日之前的安排,所以导致在程序输出的时候,将被废弃的安排先输出了。
问题更正如下:
if(time_out){
j=-1;
schedule[i].arrange.clear();
for(int k=0; k<num_students; k++){
student[k].inUse=0;
}

对于造成的不便,我们表示歉意。
此说明。