コード例 #1
0
ファイル: heitor.c プロジェクト: leor356/unicamp
void combinacoes(int **matriz, int *custos, int num_parlamentares, int 
				 tam_partido, int temp[], int next, int size, int 
				 *preco_total) {
	int i;
	int tem, influenciados;
	
	if (size >= tam_partido) {
		*preco_total = 0;
		for (i = 0; i < tam_partido; i++)
			printf("%d ", temp[i]);
		printf("preco total = %d\n", *preco_total);
	}
	
	for (i = next; i <= num_parlamentares; i++) {
		/* Verifica se o parlamentar ja esta no partido */
		tem = verifica (temp, size, i);
		/* Caso o parlamentar ainda nao esteja no partido ...  */
		if (tem == 0) {
			/* ... insere ele no vetor */
			temp[size] = i;
			/* Veririca quantos e quais parlamentares ele influencia */
			influenciados = influencias(matriz, i, num_parlamentares, size, 
										temp);
			if (size + influenciados <= tam_partido)
			combinacoes(matriz, custos, num_parlamentares, tam_partido, 
						temp, i + 1, size + influenciados, preco_total);
		}
		
		/* Caso o parlamentar a ja estivesse no partido */
		else {
			combinacoes(matriz, custos, num_parlamentares, tam_partido, temp, 
						i + 1, size, preco_total);
		}
			
			
	}
}
コード例 #2
0
ファイル: heitor.c プロジェクト: leor356/unicamp
int main() {
	/* Variaveis de entrada */
	int num_parlamentares, tam_partido, *custos, **matriz;
	
	/* Variaveis de controle de laco */
	int i, j;
	
	/* Variaveis auxiliares */
	int preco_total = 0, *temp;
	
	/* Le a primeira linha da entrada */
	scanf("%d %d", &num_parlamentares, &tam_partido);
	
	/* Aloca espaco para os custos dos parlamentares , para a matrize para temp 
		*/
	custos = malloc(num_parlamentares * sizeof(int));
	
	matriz = malloc( num_parlamentares * sizeof(int *));
	for (i = 0; i < num_parlamentares; i++)
		matriz[i] = malloc (num_parlamentares * sizeof(int));
	
	temp = malloc(tam_partido * sizeof(int));
	
	/* Le o restante da entrada */
	for (i = 0; i < num_parlamentares; i++)
		scanf("%d", &custos[i]);
	
	for (i = 0; i < num_parlamentares; i++)
		for (j = 0; j < num_parlamentares; j++)
			scanf("%d", &matriz[i][j]);
		
	combinacoes (matriz, custos, num_parlamentares, tam_partido, temp, 1, 
	   0, &preco_total);

	return 0;
	}
コード例 #3
0
tabuleiro *aleatorio(tabuleiro *tab,int before){
	int lin,col,i,l,com=0,barexist,barconess, posicoes;
	int linhas[100],comb[100];
	char tmp[100][100],local[100][100];
	tabuleiro *f, *w, *z, *x;

	


	for(lin=0;lin!=tab->tamanho[0];lin++){
		barexist=0;
		posicoes=0;
		for(col=0;col!=tab->tamanho[1];col++){
			if(caniboat(tab,lin,col)) posicoes++;
			else if(tab->quadro[lin][col]!='~' && tab->quadro[lin][col]!='.') barexist++;
		}
		barconess=tab->linhas[lin]-barexist;
		comb[lin]=combinacoes(posicoes,barconess);
	}


	for(i=0;i!=tab->tamanho[0];i++)
		linhas[i]=i;



	ordena(comb,linhas,0,tab->tamanho[0]);



	for(i=0;comb[i]==0;i++);

	l=linhas[i];
	com=0;








	for(lin=0;lin!=tab->tamanho[0];lin++)
	   	for(col=0;col!=tab->tamanho[1];col++)
	   		tmp[lin][col]=tab->quadro[lin][col];


		do{
			if(verifica(tab)==2) ;
			else if(verifica(tab)==0){

				for(lin=0;lin!=tab->tamanho[0];lin++)
	   				for(col=0;col!=tab->tamanho[1];col++)
	   					tab->quadro[lin][col]=tmp[lin][col];

	   				++com;

					if(com>=comb[i]) {com=0; l=linhas[++i];}

	   				tab=aleoaux(tab,l,com);
	   			}

	  	    else if(verifica(tab)==1){

	  	    	++com;

				if(com>=comb[i]) {com=0; l=linhas[++i];}



	  	    	tab=aleoaux(tab,l,com);
	  	    } 			

			do{
				for(lin=0;lin!=tab->tamanho[0];lin++)
	   				for(col=0;col!=tab->tamanho[1];col++)
	   					local[lin][col]=tab->quadro[lin][col];
	   	

        	f=aloca(tab);
        	w=verigual(tab,estra1(f));


        	f=aloca(w);
        	z=verigual(w,estra2(f));


        	f=aloca(z);
        	x=verigual(z,estra3(f));

        	f=aloca(x);
        	tab=verigual(x,estra4(f));



		}while(changes(local,tab) && verifica(tab)!=2);


		if(verifica(tab)==0){
			for(lin=0;lin!=tab->tamanho[0];lin++)
	   				for(col=0;col!=tab->tamanho[1];col++)
	   					tmp[lin][col]=tab->quadro[lin][col];

		}




		if(before==1){
			for(lin=0;lin!=tab->tamanho[0];lin++)
	   				for(col=0;col!=tab->tamanho[1];col++)
	   					tmp[lin][col]=tab->quadro[lin][col];

	   	return tab;

		}
		else if(verifica(tab)!=2 && i+1==tab->tamanho[0]) tab=aleatorio(tab,1);

		if(dots(tab) || verifica(tab)!=2) {
			for(lin=0;lin!=tab->tamanho[0];lin++)
	   				for(col=0;col!=tab->tamanho[1];col++)
	   					tmp[lin][col]=tab->quadro[lin][col];

	   	return tab;

		}

	}while(verifica(tab)!=2);


   return tab;
}