Weblogs Código

RecorteX

» Tauron32
73 usuarios y 244 recortes de código
Usuario

Contraseña
Crear cuenta
Estás viendo los recortes del usuario Tauron32

RSS
Recortes: 3
Registrado: 20/1/2009
Web

Etiquetas:
c (2)
torres (1)
consola (1)
matriz (1)
hanoi (1)
ochoreinas (1)
ajedrez (1)
java (1)
problema (1)
array (1)
juego (1)
solución (1)
matrices (1)

Problema de las Ocho Reinas

Solución al problema de las Ocho Reinas, en el que usamos backtracking.

 
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
// Constantes
const int MAX = 8; // Cambiar el 8 por N para obtener problemas con N reinas y un tablero de NxN
 
// Tipos
typedef int TReinas reinas [MAX];
 
// Cabeceras de funciones y procedimientos
void OchoReinas(TReinas &r, int fila);
bool EsSeguro(TReinas r, int fila, int prueba);
void PintarTablero(TReinas r);
 
//Programa principal
int main () {
	TReinas reinas;
 
	OchoReinas(reinas,0);
}
 
// Implementación de funciones y procedimientos
void OchoReinas(TReinas &r, int fila) {
	int prueba;
	
	for(prueba = 0; prueba < MAX; prueba++) {
		if(EsSeguro(r,fila,prueba)) {
			r[fila] = prueba;
			if(fila == (MAX-1)) {
				PintarTablero(r);
			}
			else {
				OchoReinas(r,fila+1);
			}
		}
	}
}
 
bool EsSeguro(TReinas r, int fila,int prueba) {
	int i;
	
	for(i = 1; i < MAX; i++) {
		if((r[fila-i] == prueba) || (r[fila-i] == prueba-i) || (r[fila-i] == prueba+i)) {
			return false;
		} 
	}
	return true;
}
 
void PintarTablero(TReinas r) {
	
	cout << "---------------------------------" << endl;
	for(int fila = 0; fila < MAX; fila++) {
		for(int i = 0; i < r[fila]; i++) {
			cout << "|   ";
		}
		cout << "| X ";
		for (int j = (r[fila] + 1); j < MAX; j++) {
			cout << "|   ";
		}
		cout << "|" << endl << "---------------------------------" << endl;
	}
	cout << endl;
}
 

Torres de Hanoi

Pequeño algoritmo que resuelve el juego de las Torres de Hanoi con N discos. No tiene interfaz gráfica, todo lo hace desde la consola.

 
package hanoi;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
/**
 *
 * @author tauron
 */
public class Hanoi {
 
	public enum palo {izquierdo,central,derecho};
 
	public static void Mover(int n,palo origen, palo auxiliar,palo destino) {
		if(n == 1) {
			System.out.println("Mueve el disco " + n + " desde el palo " + origen + " al " + destino);
		}
		else {
			Mover(n-1,origen,destino,auxiliar);
			System.out.println("Mueve el disco " + n + " desde el palo " + origen + " al " + destino);
			Mover(n-1,auxiliar,origen,destino);
		}
	}
 
    public static void main(String[] args) {
		BufferedReader dataIn = new BufferedReader(new InputStreamReader( System.in));
 
		int numDiscos;
		String discos = "";
 
		System.out.print("Introduce el número de discos: ");
 
		try{
			discos = dataIn.readLine();
		}catch(IOException e){
			System.out.println("¡Error!");
		}
 
		numDiscos = Integer.valueOf(discos);
		while (numDiscos < 1) {
			System.out.println("Vaya chorrada de número has metido. ERROR.");
			System.out.print("Inserta el número de discos: ");
 
			try{
				discos = dataIn.readLine();
			}catch(IOException e){
				System.out.println("¡Error!");
			}
 
			numDiscos = Integer.valueOf(discos);
			
		} // Fin del while
 
		Mover(numDiscos,palo.izquierdo,palo.central,palo.derecho);
    }
 
}
 

Sacar el valor máximo de las diagonales superiores

Dada una matriz cuadrada de enteros, el algoritmo devuelve el valor máximo de cada paralela superior a la diagonal principal.

 
// Incluir E/S y Librerías Standard
#include <iostream>
#include <cstdlib>
using namespace std;
 
// Zona de Declaración de Constantes
const int MAX = 100;
// Zona de Declaración de Tipos
typedef int TArray [MAX][MAX];
 
typedef struct TMatriz
{
	TArray a;
	int elem;	
};
 
// Zona de Cabeceras de Procedimientos y Funciones
void Inicializar(TMatriz &m);
void LeerMatriz(TMatriz &m);
void EscribirMatriz(TMatriz &m);
void Diagonales(TMatriz &m);
int ValorMax(TMatriz &m, int tope);
// Programa Principal
 
int main()
{
	// Zona de Declaración de Variables del Programa principal
	TMatriz matriz;
	
	cout << endl << "Ejercicio 10.-" << endl << endl;
	Inicializar(matriz);
	LeerMatriz(matriz);
	cout << endl;
	EscribirMatriz(matriz);
	Diagonales(matriz);
	system("Pause"); // Hacer una pausa	
	return 0;	   // Valor de retorno al S.O.
}
 
// Implementación de Procedimientos y Funciones
 
void Inicializar(TMatriz &m)
{
	m.elem = -1;
	
	for(int i = 0; i<MAX; i++)
	{
		for(int j = 0; j<MAX; j++)
		{
			m.a[i][j] = 0;
		}
	}
}
 
void LeerMatriz(TMatriz &m)
{
 
	cout << "Indica el numero de filas y columnas que tendra la matriz cuadrada: ";
	cin >> m.elem;
	while(m.elem <= 0)
	{
		cout << "Escribe un numero mayor que 0: ";
		cin >> m.elem;
	}
	cout << "Introduce valores: " << endl << endl;
	for (int i = 0; i<m.elem; i++)
	{
		for(int j = 0; j<m.elem; j++)
		{
			cout << "Fila " << i << " Columna " << j << ": ";
			cin >> m.a[i][j];
		}
	}
	
}
 
void EscribirMatriz(TMatriz &m)
{
	cout << endl << "Tu matriz es: " << endl;
	
	for(int i = 0; i<m.elem; i++)
	{
		for(int j = 0; j<m.elem; j++)
		{
			cout << m.a[i][j] << " ";
		}
		cout << endl;
	}
	
	cout << endl;
}
 
 
void Diagonales(TMatriz &m)
{
	for(int i = 1; i < m.elem; i++)
	{
		cout << "Diagonal " << i+1 << ": " << ValorMax(m, i) << endl;
	}
	
}
 
int ValorMax(TMatriz &m, int tope)
{
	int valor;
	
	valor = 0;
	
	for(int i = 0; i < (m.elem - (tope - 1)); i++)
	{
		if(m.a[i][i+tope] > valor)
		{
			valor = m.a[i][i+tope];
		}
	}
	
	return valor;
}
 
Proyecto: Juanjo Navarro, 2006 - Diseño: Albin