Untitled
unknown
c_cpp
4 years ago
3.8 kB
6
Indexable
#define tempoParado 15
#define tempoMovendo 5
int tempoAtenderChamada (Elevador *elevador, int andar, int direcao) {
int tempo = 0;
switch (elevador->estado) {
case 0: {
if (vaziaFila(elevador->destino)) {
if (elevador->andar_atual < andar) {
for (int i = elevador->andar_atual; i <= andar; i++)
tempo += tempoMovendo;
return tempo;
} else if (elevador->andar_atual > andar) {
for (int i = elevador->andar_atual <= andar; i >= andar; i--) {
tempo += tempoMovendo;
}
return tempo;
} else
return 0;
}
else {
if (elevador->andar_atual < elevador->destino->fim->andar) {
for (int i = elevador->andar_atual; i <= elevador->destino->fim->andar; i++) {
if (buscaNodo(elevador->destino, i) != NULL)
tempo += tempoParado;
else
tempo += tempoMovendo;
}
} else if (elevador->andar_atual > elevador->destino->fim->andar) {
for (int i = elevador->andar_atual; i >= elevador->destino->fim->andar; i--) {
if (buscaNodo(elevador->destino, i) != NULL)
tempo += tempoParado;
else
tempo += tempoMovendo;
}
}
return tempo;
}
}
case 1: {
if (elevador->andar_atual < andar) {
for (int i = elevador->andar_atual; i <= andar; i++) {
if (buscaNodo(elevador->destino, i) != NULL)
tempo += tempoParado;
else
tempo += tempoMovendo;
}
return tempo;
} else if (elevador->andar_atual > andar) {
for (int i = elevador->andar_atual; i >= elevador->destino->fim->andar; i--) {
if (buscaNodo(elevador->destino, i) != NULL)
tempo += tempoParado;
else
tempo += tempoMovendo;
}
return tempo;
} else
return 0;
}
case 2: {
if (elevador->andar_atual < andar) {
for (int i = elevador->andar_atual; i >= elevador->destino->fim->andar; i--) {
if (buscaNodo(elevador->destino, i) != NULL)
tempo += tempoParado;
else
tempo += tempoMovendo;
}
return tempo;
} else if (elevador->andar_atual > andar) {
for (int i = elevador->andar_atual; i <= andar; i++) {
if (buscaNodo(elevador->destino, i) != NULL)
tempo += tempoParado;
else
tempo += tempoMovendo;
}
return tempo;
} else
return 0;
}
}
}
Elevador *elevadorMaisProx(Elevador **elevador, int numElevadores, int andar, int direcao) {
Elevador *maisProx = elevador[0];
int menorTempo = tempoAtenderChamada(elevador[0], andar, direcao);
//puts("done");
for (int i = 1; i < numElevadores; i++) {
if (tempoAtenderChamada(elevador[i], andar, direcao) < menorTempo) {
maisProx = elevador[i];
menorTempo = tempoAtenderChamada(elevador[i], andar, direcao);
}
}
return maisProx;
}Editor is loading...