Beispiel #1
0
int remove_no(struct lista *l, struct no *rno, int destroi(void *)) {

	int r = 1;

	if (l->primeiro == rno) {
		l->primeiro = rno->proximo;
		if (destroi != NULL) {
			r = destroi(conteudo(rno));
		}
		free(rno);
		l->tamanho--;
		return r;
	}

	for (no n = primeiro_no(l); n->proximo; n = proximo_no(n)) {
		if (n->proximo == rno) {
			n->proximo = rno->proximo;
			if (destroi != NULL) {
				r = destroi(conteudo(rno));
			}
			free(rno);
			l->tamanho--;
			return r;
		}
	}
	
	return 0;
}
Beispiel #2
0
void destroi(Rota *t)
{
  
  if(t == NULL)
    return;
  destroi(t->prox);
  t->prox = livre;
  livre = t;
}
Beispiel #3
0
int destroi_lista(lista l, int destroi(void *)) {

	no  p;
	int ok = 1;

	while ( (p = primeiro_no(l)) ) {
		l->primeiro = proximo_no(p);
		if ( destroi )
			ok &= destroi(conteudo(p));
		free(p);
	}
	free(l);
	return ok;
}
Beispiel #4
0
Datei: grafo.c Projekt: gvs11/BCC
//------------------------------------------------------------------------------
int destroi_lista(lista l, int destroi(void *)) {

  if ( !l )

    return 0;

  no prox;

  for (no n=primeiro_no(l); n; n=prox) {

    prox = proximo_no(n);

    if (destroi)

      destroi(conteudo(n));

    free(n);
  }

  free(l);

  return 1;
}
//Nome: MatrizAdjacenciaBuscaProfund
//Função: Realiza uma busca em profundidade em um grafo a partir de um nó, para descobrir se é conexo
//Entrada: Ponteiro para a estrutura de um grafo, nó inicial
//Saída: Retorna TRUE se o grafo é conexo e FALSE caso contrário
int MatrizAdjacenciaBuscaProfund(GrafoAdj *grafo, int valor){
    int marca = 1;
    int i, no;
    int compConex = FALSE;
    Pilha *p = cria();
    visitados = (int*) malloc(sizeof(int) * grafo->vertices);
    for (i = 0; i < grafo->vertices; i++) visitados[i] = 0;

    visitados[valor-1] = marca;
    empilha(p, valor-1);

    //while (compConex == TRUE){
        while (!vazia(p)){
            no = desempilha(p);
            visitados[no] = marca;
            for (i = 0; i < grafo->vertices; i++){
                if (grafo->matrizAdj[no][i] != 0){
                    if(visitados[i] == 0)
                        empilha(p, i);
                }
            }
        }
        compConex = TRUE;
        //marca++;
        for (i = 0; i < grafo->vertices; i++){
            if (visitados[i] == 0) {
                compConex = FALSE;
                break;
            }
        }
        //if (compConex == TRUE) empilha(p, i);
    //}
    free(visitados);
    destroi(p);
    return compConex;
}
Beispiel #6
0
int main()
{
  int casos, h;
  int m;
  int i, j;
  int o, d;
  int sai, demora, chega;
  char buf[40];
  Rota *r;
  int novo, espera;

  scanf(" %d", &casos);

  inicializa();

  for(h = 1; h <= casos; h++){

    n = 0;
    scanf(" %d", &m);
    while(m--){
      scanf(" %s", buf);
      i = acha(buf);
      if(i == n){
	strcpy(cidade[i].nome, buf);
	cidade[i].visitado = 0;
	cidade[i].min = INFI;
	cidade[i].prox = NULL;
	n++;
      }
      scanf(" %s", buf);
      j = acha(buf);
      if(j == n){
	strcpy(cidade[j].nome, buf);
	cidade[j].visitado = 0;
	cidade[j].min = INFI;
	cidade[j].prox = NULL;
	n++;
      }

      scanf(" %d %d", &sai, &demora);
      chega = (sai + demora) % 24;
      
      if((6 <= sai && sai < 18) || demora > 12 ||(6 < chega && chega <= 18))
	continue;

      r = aloca();
      r->d = j;
      r->sai = sai % 24;
      r->demora = demora;
      r->prox = cidade[i].prox;
      cidade[i].prox = r;
    }

    /*
    for(i = 0; i< n; i++){
      printf("%s | ", cidade[i].nome);
      for(r = cidade[i].prox; r != NULL; r = r->prox){
	printf("%s  ", cidade[r->d].nome);
      }
      printf("\n");
    }
    */

    scanf(" %s", buf);
    o = acha(buf);
    scanf(" %s", buf);
    d = acha(buf);

    cidade[o].min = 18;
    while(1){
      i = minimo();
      if(i == n || i == d)
	break;
      cidade[i].visitado = 1;
      for(r = cidade[i].prox; r != NULL; r = r->prox){
	espera = r->sai - (cidade[i].min % 24);
	if(espera < 0)
	  espera += 24;
	espera %= 24;
	novo = cidade[i].min + espera + r->demora;
	if(novo < cidade[r->d].min)
	  cidade[r->d].min = novo;
      }
    }
    /*
    for(i = 0; i< n; i++)
      printf("%s  - %d\n", cidade[i].nome, cidade[i].min);
    printf("\n");
    */
    printf("Test Case %d.\n", h);
    if(cidade[d].min == INFI)
      printf("There is no route Vladimir can take.\n");
    else
      printf("Vladimir needs %d litre(s) of blood.\n", (cidade[d].min - 12)/24);

    for(i = 0 ; i < n; i++)
      destroi(cidade[i].prox);
    
  }
  return 0;
}
int main()
{
    Lista *L1;
    int cc = 0, i = 0, dado, posicao;

    L1 = inicializacao();

while (cc != 7)
{
    printf("\n ****************************************************** \n");
    printf("\n                     Menu de Opcoes                     \n");
    printf("\n ****************************************************** \n");
    printf("\n 1 - Insere no inicio da lista");
    printf("\n 2 - Insere no fim da lista");
    printf("\n 3 - Insere em qualquer parte da lista");
    printf("\n 4 - Retira do inicio da lista");
    printf("\n 5 - Retira de qualquer parte da lista");
    printf("\n 6 - Exibe a lista na tela");
    printf("\n 7 - Para sair");
    printf("\n\n Escolha uma opcao: ");
    scanf("%d", &cc);

    switch (cc)
    {
    case 1:
        printf("\n Digite o numero a ser inserido na lista: ");
        scanf("%d", &dado);
        if (i == 0)
        {
            L1 = insere_lista_vazia(L1, dado);
            i++;
        }else
            L1 = insere_no_inicio_da_lista(L1, dado);
        printf("\n Inserido com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 2:
        printf("\n Digite o numero a ser inserido na lista: ");
        scanf("%d", &dado);
        if (i == 0)
        {
            L1 = insere_lista_vazia(L1, dado);
            i++;
        }else
            L1 = insere_no_fim_da_lista(L1, dado);
        printf("\n Inserido com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 3:
        printf("\n Digite o numero a ser inserido na lista: ");
        scanf("%d", &dado);
        printf("\n Digite a posicao da lista: ");
        scanf("%d", &posicao);
        L1 = insere_na_lista(L1, dado, posicao);
        printf("\n Inserido com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 4:
        L1 = retira_no_inicio(L1);
        printf("\n Retirado com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 5:
        printf("\n Digite o numero a ser retirado da lista: ");
        scanf("%d", &dado);
        printf("\n Digite a posicao da lista: ");
        scanf("%d", &posicao);
        L1 = retira_da_lista(L1, dado, posicao);
        printf("\n Retirado com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 6:
        printf("\n Lista : \n");
        exibe(L1);
        printf("\n");
        system("pause");
        system("cls");
        break;
    case 7:
        cc = 7;
        break;
    default:
        printf("\n Opcao invalida!\n Escolha uma das opcoes acima!");
        system("pause");
        system("cls");
    }
}
    destroi(L1);
    return 0;
}
int main()
{
    Dl_Lista *L1;
    int cc = 0, i = 0, dado, posicao;

    L1 = inicializa();

while (cc != 8)
{
    printf("\n ****************************************************** \n");
    printf("\n                     Menu de Opcoes                     \n");
    printf("\n ****************************************************** \n");
    printf("\n 1 - Insere no inicio da lista");
    printf("\n 2 - Insere no fim da lista");
    printf("\n 3 - Insere antes de uma posicao na lista");
    printf("\n 4 - Insere depois de uma posicao na lista");
    printf("\n 5 - Retira de qualquer parte da lista");
    printf("\n 6 - Exibe a lista na tela avancando");
    printf("\n 7 - Exibe a lista na tela recuando");
    printf("\n 8 - Para sair");
    printf("\n\n Escolha uma opcao: ");
    scanf("%d", &cc);

    switch (cc)
    {
    case 1:
        printf("\n Digite o numero a ser inserido na lista: ");
        scanf("%d", &dado);
        if (i == 0)
        {
            L1 = insere_lista_vazia(L1, dado);
            i++;
        }else
            L1 = insere_no_inicio(L1, dado);
        printf("\n Inserido com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 2:
        printf("\n Digite o numero a ser inserido na lista: ");
        scanf("%d", &dado);
        if (i == 0)
        {
            L1 = insere_lista_vazia(L1, dado);
            i++;
        }else
            L1 = insere_no_fim(L1, dado);
        printf("\n Inserido com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 3:
        printf("\n Digite o numero a ser inserido na lista: ");
        scanf("%d", &dado);
        printf("\n Digite a posicao da lista: ");
        scanf("%d", &posicao);
        L1 = insere_antes(L1, dado, posicao);
        printf("\n Inserido com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 4:
        printf("\n Digite o numero a ser inserido na lista: ");
        scanf("%d", &dado);
        printf("\n Digite a posicao da lista: ");
        scanf("%d", &posicao);
        L1 = insere_depois(L1, dado, posicao);
        printf("\n Inserido com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 5:
        printf("\n Digite a posicao da lista: ");
        scanf("%d", &posicao);
        L1 = remove_da_lista(L1, posicao);
        printf("\n Retirado com sucesso\n");
        system("pause");
        system("cls");
        break;
    case 6:
        printf("\n Lista avancando: \n");
        exibe_av(L1);
        printf("\n");
        system("pause");
        system("cls");
        break;
    case 7:
        printf("\n Lista recuando: \n");
        exibe_rec(L1);
        printf("\n");
        system("pause");
        system("cls");
        break;
    case 8:
        cc = 8;
        break;
    default:
        printf("\n Opcao invalida!\n Escolha uma das opcoes acima!");
        system("pause");
        system("cls");
    }
}
    destroi(L1);
    return 0;
}