[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Muitas perguntas!
Yoshi,
Sobre a seguinte passagem, gostaria de saber se minhas interpretações
estão corretas:
int k;
comeco = fim = NULL;
for (k = 1; k <= n; k++)
if (el (k)->g_entr == 0)
if (comeco == NULL)
fim = comeco = el (k);
else
{
fim->prox_fila = el (k);
fim = el (k);
}
}
Nessa parte, COMECO e FIM comecam como NULL e o programa analisa o
g_entr de cada um dos dados contidos em ELS. Se o no inicio da analise o
COMECO estiver vazio, entao a tarefa e inserida tanto em FIM como em
COMECO, senao o elemento analisado sera colocado no PROX_FILA do
elemento que se encontra em fim (ou seja, seja será um sucessor do
elemento ue já consta em FIM (???) ). Logo em seguida, esta tarefa e
inserida dentro de FIM.
Digamos que eu tenha a seguinte entrada:
5
1 2
1 3
2 3
3 4
5 4
Podemos perceber que 1 e 5 possuem g_entr=0... Já posso interpretar
nesta parte do programa que já temos duas rodadas em execução (uma
máquian executa 1, e outra , executa 5)
Então, inicialmente, a tarefa 1 seria incluída em COMECO e tambem em
FIM ? Já a tarefa 5 (cujo g_entr=0) seria colocada como sucessora de 1
dentro da estrutura FIM ?
Seguindo com o mesmo exemplo
while (comeco)
{
struct sucessor *ptr, *tmp;
ptr = comeco->topo_suc;
PTR estaria apontando para a lista de sucessores da tarefa que se
encontra em COMECO (logo estaria apontando para 2, que estaria apontando
para 3 (???)). É isso ?
while (ptr)
{
ptr->id->g_entr--;
if (ptr->id->g_entr == 0)
{
ptr->id->prox_fila = NULL;
fim->prox_fila = ptr->id;
fim = ptr->id;
}
tmp = ptr;
ptr = ptr->prox_suc;
free (tmp);
}
Bem, gostaria de saber se, pelos menos, estou no caminho certo... Na
verdade, presumo que, no EP, basta incrementar este programa para que
ele faça a contagem de rodadas, portanto o seu completo entedimento é
fundamental, não e verdade ?
Lemos