Beispiel #1
0
int main(){
    Fila* f;
    int tam, op;
     
    P("Informe o tamanho da fila circular: ");
    scanf("%d", &tam);
     
    f = criaFila(tam);
     
    do{
        system("cls");
        P("Escolha uma das opcoes abaixo --\n");
        P("\t1. Inserir um elemento na fila circular;\n");
        P("\t2. Remover um elemento da fila circular;\n");
        P("\t3. Fila vazia ?\n");
        P("\t4. Mostrar a fila circular;\n");
        P("\t5. Sair.\n");
        P("Resposta escolhida: ");
        scanf("%d", &op);
          
        switch(op){
            case 1:{
                int valor;
                  
                P("Digite o valor a ser inserido na fila circular: ");
                scanf("%d", &valor);
                    
                insereFila(f, valor);
            }
            break;           
            case 2: {
                if(filaVazia(f))
                    P("Fila vazia.\n");
                else
                    printf("Valor removido: %d.\n", removeFila(f));
                    getch();
            }
            break;
            case 3: {
                if(filaVazia(f))
                    P("Fila vazia.\n");
                else
                    P("Fila nao esta vazia.\n");
                    getch();
            }
            break;
            case 4: mostraFila(f);
            break;
            case 5: exit(0);
            break;
            default : {
                P("Opcao invalida.\n");
                getch();
            }
            break;
        }
    }while(op != 5);
    getch();
    return 0;
}
//Função responsável por realizar a busca em largura no grafo
int bfs(){
    // Cria um vetor para marcar quais vértices já foram visitados
    int *visited, n;
    visited = (int *)malloc(numVertices * sizeof(int));
    if(visited == NULL){printf("Falta de memoria!\n");exit(0);}
    for(int i = 0; i < numVertices; i++){
        visited[i] = 0;
    }

    // Cria a fila para executar a busca em largura
    struct fila *q = NULL, *fim = NULL;
    q = insereFila(q, &fim, inicio);
    visited[inicio] = 1;
    pai[inicio] = -1;

    // Inicia a busca em largura
    while (q != NULL){
        int u = q->val;
        q = removeFila(q);

        for (int v=0; (v<numVertices); v++){
            if (visited[v]==0 && redeResidual[u][v] > 0){
                q = insereFila(q, &fim, v);
                pai[v] = u;
                visited[v] = 1;
                if(v == destino){
                    n = visited[destino];
                    free(visited);
                    q = limpaFila(q, &fim);
                    return (n == 1);
                }
            }
        }
    }

    // Retorna verdadeira caso encontre um novo caminho da superorigem até o superdestino
    // Retorna falso, caso contrário
    n = visited[destino];
    free(visited);
    q = limpaFila(q, &fim);
    return (n == 1);
}