Exemplo n.º 1
0
//----------------------------------------------------------
bool ParserXML::acessarElemento(unsigned tipo_elem)
{
    bool possui_elem;
    xmlNode *vet_elems[4];

    if(!elem_raiz)
        throw Excecao(ERR_PARSERS_OPRARVELEMNAOALOC,__PRETTY_FUNCTION__,__FILE__,__LINE__);

    vet_elems[ELEMENTO_RAIZ]=elem_atual->parent;
    vet_elems[ELEMENTO_FILHO]=elem_atual->children;
    vet_elems[ELEMENTO_POSTERIOR]=elem_atual->next;
    vet_elems[ELEMENTO_ANTERIOR]=elem_atual->prev;

    /* Verifica se o elemento atual possui o elemento que
       se deseja acessar. O flag possui_elem também é usado
       no retorno do método para indicar se o elemento foi
       movido ou não. */
    possui_elem=possuiElemento(tipo_elem);

//Caso possua o elemento
    if(possui_elem)
        //Move o elemento atual para o elemento escolhido
        elem_atual=vet_elems[tipo_elem];

    return(possui_elem);
}
Exemplo n.º 2
0
int main()
{

    // Inteiros auxiliares
    int i, j, x, y, inicial;


    // Recebe o 'n' inicial
	scanf("%d", &n);
    // Recebe o 'm' inicial
	scanf("%d", &m);

	// Laço principal
	while (n != 0 || m != 0)
    {

        max = 0;

        // Reinicia o vetor de estado dos vértices e a lista de adjacencia
        for (i = 0; i < n; i++)
        {
            estado[i] = INEXPLORADO;
            adjacencia[i] = NULL;
        }

        // Recebe o valor de cada vertice
        for (i = 0; i < n; i++)
        {
            scanf("%d", &valor[i]);
        }

		// Recebe as 'm' relações entre os vértices
		for (i = 0; i < m; i++)
        {
			scanf("%d", &x);
            scanf("%d", &y);
            adjacencia[x] = insereElem(adjacencia[x], y);
		}

        // Encontra quais são os vértices que não são dependentes de nenhum outro
        // A partir desses, chama a recursão para encontrar o maior caminho
        if (n == 1)
        {
            max = valor[0];
        }
        else{
            for (i = 0; i < n; i++)
            {
                if (estado[i] == INEXPLORADO)
                {
                    inicial = 1;
                    for (j = 0; j < n; j++)
                    {
                        if (possuiElemento(adjacencia[j], i))
                        {
                            inicial = 0;
                            break;
                        }
                    }
                    if (inicial)
                    {
                        exploraVertice(adjacencia[i], i);
                    }
                }
            }
        }

		// Imprime o resultado
        printf("%d\n", max);

        for (i = 0; i < n; i++)
        {
            libera(adjacencia[i]);
        }

		// Recebe um novo 'n'
		scanf("%d", &n);
        // Recebe um novo 'm'
		scanf("%d", &m);
	}

	return 0;
}