コード例 #1
0
ファイル: batalla.c プロジェクト: acetosella90/info2
int main(void){

	system("clear");

	int coord[2];
	char letra[2];
	int numBarcos = 3;

	iniciarTablero();

	for(numBarcos = 0 ; numBarcos < 3 ; numBarcos++){
		mostrarTablero();
		printf("Ingrese BARCO N° %d de 3: \nLETRA(minuscula): ", numBarcos+1);
		
		scanf("%s", letra);
		
		switch(letra[0]){
		    case 'a'  :
		       coord[0] = 0;
		       break; 
		    case 'b'  :
		       coord[0] = 1;
		       break;
		    case 'c'  :
		       coord[0] = 2;
		       break; 
		    case 'd'  :
		       coord[0] = 3;
		       break; 
		    case 'e'  :
		       coord[0] = 4;
		       break;
		}

		printf("NUMERO: ");
		scanf("%d",&coord[1]);
		ingresoBarcos(coord);
	}
	mostrarTablero();

	return 0;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: freinn/cplusplusclasses
int colocarReina (int fila, int reinas[], int n, bool& todas) //todas indica que hemos llegado a una solución factible
{
	int ok = FALSE;
	if (!todas && fila < n) {   // Quedan reinas por colocar
		reinas[fila] = 0;
		while(!todas && reinas[fila] < n) {   // Comprobamos si la posición de la reina actual es válida
			if (comprobar(fila,reinas,n)) {    	   // Si es así, intentamos colocar
				colocarReina (fila+1, reinas, n, todas);  // las reinas restantes
			}
			reinas[fila]++;
		}
	}else{  // No quedan reinas por colocar (solución)
		todas = true;
		mostrarTablero(reinas,n);
	}
	return ok;
}
コード例 #3
0
ファイル: ejercicio3.cpp プロジェクト: jjamardo/algo3
void Ejercicio3::rompecolores(int filaAnterior, int columnaAnterior){
	int fila = 0;
	int columna = 0;

	// Nos movemos de fila y columna
	columna = columnaAnterior+1;
	fila = filaAnterior;
	if(columna > columnas-1){
		fila = filaAnterior+1;
		if(fila > filas-1){
			//Se termino el tablero, se termino el algoritmo
			return;
		}
		columna = 0;
	}

	// Chequeamos todas las piezas posibles.
	list<int> piezasNro = autofill->damePosibles(tablero, fila, columna);
	list<int>::iterator it;
	for (it = piezasNro.begin(); it != piezasNro.end(); it++){
		/**
		 * Se itera en la cantidad de piezas posibles pidiendo al autofill, en cada paso de la iteración, que
		 * llene la posición. Si el autofill no pudo llenarla, pasamos a la próxima ficha. Si salimos del for
		 * sin meter fichas, entonces hacemos el paso recursivo contemplando la posibilidad de dejar el espacio
		 * en blanco.
		 */

		// Llama a autofill para poner una pieza, en caso de que autofill falle, retorna false, en caso de que
		// inserte una pieza, se ajustan los contadores.
		if (!llenarPosicion(fila, columna, *it)){
			continue;
		}
		mostrarTablero(tablero, filas, columnas);

		// Si pudimos ubicar mas piezas, entonces encontramos una mejor solucion.
		if(numPiezasUbicadas > numPiezasMejorSol){
			numPiezasMejorSol = numPiezasUbicadas;
			mejorSolucion = tablero;
		}

		/**
		 * -- PODA --
		 * Si las posiciones restantes más el número de piezas ubicadas es menor que la cantidad de piezas en la
		 * mejor solucion, se corta, ya que por más que se puedan ubicar piezas en las posiciones no alcanza.
		 * Por otro lado, si el máximo cantidad de fichas que se puede ubicar más las piezas ubicadas es menor
		 * que la cantidad de la mejor solución también se corta.  Para resolver ambos casos sólo hace falta
		 * sacar el mínimo entre las posiciones del tablero y la máxima cantidad de piezas por ubicar.
		 */
		if (poda_habilitada){
			int numPosicionesRestantes = numPosicionesTablero - numPosicionesAnalizadas;
			int posibilidades = min(numPosicionesRestantes, numPiezasPorUbicar);
			if ((posibilidades + numPiezasUbicadas) <= numPiezasMejorSol){

				// LLama a autofill para vaciar la posicion y ajusta los contadores.
				vaciarPosicion(fila, columna, *it);

				//mostrarTablero(tablero, filas, columnas);
				return;
			}
		}


		// Se hace el llamado recursivo.
		rompecolores(fila, columna);

		// Llama a autofill para vaciar la posicion y ajusta los contadores.
		vaciarPosicion(fila, columna, *it);
	}

	// Ponemos en la posición la ficha blanca
	dejarBlanco(fila, columna);
	mostrarTablero(tablero, filas, columnas);

	// Llamado recursivo
	rompecolores(fila, columna);

	// Quitamos de la posición la ficha blanca.
	quitarBlanco(fila, columna);

}
コード例 #4
0
ファイル: ejercicio3.cpp プロジェクト: jjamardo/algo3
void Ejercicio3::mostrarMejorSolucion(){
	cout << "Mejor solucion: " << endl;
	mostrarTablero(mejorSolucion, filas, columnas);
}