[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