Exemplo n.º 1
0
void gerar_grafo(int tamanho, float densidade) {
	int i, k, j, dest, peso, max_nodos, cont_max, max_atual;
	TipoLista* lista;
	lista = cria_lista(tamanho);
	max_nodos = (int)tamanho*densidade;

	for (i=0; i<tamanho; i++) {
		max_atual = max_nodos - lista->nodos[i].quantidade;
		for (k=0; k<max_atual; k++) {
			cont_max = 0;
			do {
				dest = rand()%tamanho;
				cont_max++;
				if (cont_max > tamanho)
					break;
			}while (tem_item(*lista, i, dest) || dest == i || lista->nodos[dest].quantidade == max_nodos);
			
			if (cont_max < tamanho) {
				peso = 10 + rand()%1000;
				add_item(lista, i, dest, peso);
				add_item(lista, dest, i, peso);
			}
			else {
				for (j=0; j<tamanho; j++) {
					if (!tem_item(*lista, i, j) && j != i && !(lista->nodos[j].quantidade == max_nodos)) {
						peso = 10 + rand()%1000;
						add_item(lista, i, j, peso);
						add_item(lista, j, i, peso);
						break;
					}
				}
			}
		}
	}
	grava_lista(*lista, lista->tamanho, max_nodos);
	apaga_lista(lista);
}
Exemplo n.º 2
0
void apagar_linha(ptr_no linha) /*Apagar qualquer linha*/
{
	remove_grandes(linha->acima); /* Apagar as pecas da linha de cima que ocupem a que vamos apagar*/
	apaga_lista(linha->lista_pecas); /* apagar a lista de pecas da linha a apagar*/
	top = apagar_no(linha,top); /*Apaga a linha*/	
}