int main(int argc, char *argv[]) { int i; found = 0; no_more_pass = 0; strcpy(hash, argv[1]); filaPasswords = initFila(filaPasswords); // Inicialização do semáforo sem_init(&sem, 0, 1); // Criação das threads pthread_create(&produtor, NULL, producePasswords, NULL); for (i = 0; i < NUM_CONSUMIDORES; i++) { pthread_create(&consumidor[i], NULL, testPasswords, NULL); } // Aguarda a finalização das threads pthread_join(produtor, NULL); for (i = 0; i < NUM_CONSUMIDORES; i++) { pthread_join(consumidor[i], NULL); } if (!found) { printf("Senha não encontrada!\n"); } freeFila(filaPasswords); return 0; }
//Imprime caminho por meio de antecessores int printCaminho(grafo G) { //Caso Vertice de entrada ou Vertice de saída não estejam dentro da distância maxima permitida do corpo de bombeiros if(G->cor[G->root] != Vermelho || G->cor[G->end] != Vermelho) { printf("-1\n"); return -1; } //Como é feito por meio de antecessores colocamos tudo em um queue fila F = initFila(); float probs = 1; //Guarda caminho em um queue int vertice = G->end; do { Queue(F,vertice); probs = probs * G->probs[vertice]; vertice = G->anterior[vertice]; } while(vertice != -1); //Impressão dos Resultados printf("%.2f",1.0-probs); while(!isEmpty(F)) { printf(" %d",deQueue(F)); } printf("\n"); liberaFila(F); return 1; }