Example #1
0
int algoritmo(int nivel){
	int i;
	for(i=letrasUsadas[2][nivel];i<10;i++){
		if(valoresUsados[i]==0){
			valoresUsados[i]=1;
			letras[letrasUsadas[0][nivel]]=i;
			if(letrasUsadas[1][nivel]==0){
				algoritmo(nivel+1);
			}
			else{
				if(verificaSolucao(letrasUsadas[1][nivel])==1){
					//printf("nivel: %d nletras: %d\n",nivel,nLetras-1);
					if(nivel==nLetras-1){
						existeSolucao=1;
						trataSolucao();
						
						
					}
					else{
						algoritmo(nivel+1);
					}
				}
				
			}
			valoresUsados[i]=0;
		}	
	}
	return 0;
}
void main(){
	int tabuleiro[9][9], i, j;
	/* leitura */
	for( i = 0; i < 9; i++)
		for(j = 0; j < 9; j++)
			scanf("%d",&(tabuleiro[i][j]));
	verificaSolucao((int *)tabuleiro);
}
Example #3
0
int algoritmo(int nivel){
	int i;
	/*o for comeca na mascara de cada letra(ou seja ou em 1 ou 0 conforme essa letra tenha sido uma primeira letra de uma palavra ou nao)*/
	//i= valor que se vai dar a letra desse nivel
	for(i=letrasUsadas[2][nivel];i<10;i++){
		/*se o valor escolhido ainda nao tiver sido usado*/
		if(valoresUsados[i]==0){
			/*marca-se o valor como usado*/
			valoresUsados[i]=1;
			/*a letra recebe o valor escolhido no array que contem todo o alfabeto*/
			letras[letrasUsadas[0][nivel]]=i;
			/*se ate esta letra nao se conseguir fazer nenhum somatorio de uma coluna, entao continuar a recursao*/
			if(letrasUsadas[1][nivel]==0){
				algoritmo(nivel+1);
			}
			/*se ja se conseguir fazer a soma de colunas, então irei testar*/
			else{
				/*se se verificar o somatorio das colunas*/
				if(verificaSolucao(letrasUsadas[1][nivel])==1){
					/*verificar se é o ultimo nivel. como verificou todas as colunas, entao é uma solucao e vai tratar dessa solucao*/
					if(nivel==nLetras-1){
						existeSolucao=1;
						trataSolucao();
						contador++;
						
					}
					/*se nao for o ultimo nivel(letra diferente),entao continua a recursao*/
					else{
						algoritmo(nivel+1);
					}
				}
				/*se nao verificar solucao da coluna, entao vou desmarcar(por a 0) o valor usado para esta letra e retorno 0 
				á recursao anterior que irá testar outro valor para este nivel*/
				
			}
			valoresUsados[i]=0;
		}	
	}
	return 0;
}