public class Main
{
static final int elementos = 10;
static final int[][] grupos = {{1,2}, {2,2}};
static final char ELEMENTO_SELECCIONADO = 'X';
static final char ELEMENTO_NO_SELECCIONADO = 'O';
static int numCombinacion = 0;
static int numGrupos = 0;
public static void main
(String[] args
) {
int numElem = 0;
int[] combinacion = null;
for(int i = 0; i < grupos.length; i++)
{
numElem += grupos[i][0] * grupos[i][1];
numGrupos += grupos[i][1];
}
if(numElem != 0 && numGrupos <= elementos - numElem + 1)
{
combinacion = new int[elementos - numElem + 1];
UbicarGrupo(combinacion, 0, 1, 0);
}
else if(numElem == 0)
{
combinacion = new int[elementos];
Imprimir(combinacion);
}
else
{
System.
out.
println("No hay combinaciones posibles"); }
}
public static void UbicarGrupo(int[] vector, int indiceCardinalidad, int indiceGrupo, int posicion)
{
if(indiceCardinalidad == grupos.length - 1 && indiceGrupo == grupos[indiceCardinalidad][1])
{
for(int i = posicion; i < vector.length; i++)
{
if(vector[i] == 0)
{
vector[i] = grupos[indiceCardinalidad][0];
Imprimir(vector);
vector[i] = 0;
}
}
}
else if(indiceCardinalidad != grupos.length - 1 && indiceGrupo == grupos[indiceCardinalidad][1])
{
for(int i = posicion; i < vector.length; i++)
{
if(vector[i] == 0)
{
vector[i] = grupos[indiceCardinalidad][0];
UbicarGrupo(vector, indiceCardinalidad + 1, 1, 0);
vector[i] = 0;
}
}
}
else
{
for(int i = posicion; i < vector.length; i++)
{
if(vector[i] == 0)
{
vector[i] = grupos[indiceCardinalidad][0];
UbicarGrupo(vector, indiceCardinalidad, indiceGrupo + 1, i + 1);
vector[i] = 0;
}
}
}
}
public static void Imprimir(int[] vector)
{
numCombinacion++;
int gruposImpresos = 0;
System.
out.
print(numCombinacion
+ ":\t");
for(int i = 0; i < vector.length - 1; i++)
System.
out.
print(vector
[i
] + "|");
System.
out.
print(vector
[vector.
length - 1] + "\t");
for(int i = 0; i < vector.length; i++)
{
if(vector[i] != 0)
{
gruposImpresos++;
for(int j = 1; j <= vector[i]; j++)
System.
out.
print(ELEMENTO_SELECCIONADO
);
if(gruposImpresos < numGrupos)
System.
out.
print(ELEMENTO_NO_SELECCIONADO
); }
else
System.
out.
print(ELEMENTO_NO_SELECCIONADO
); }
if(EsVectorSimetrico(vector))
else
}
public static boolean EsVectorSimetrico(int[] vector)
{
boolean esSimetrico = true;
for(int i = 0; i < vector.length / 2 && esSimetrico; i++)
esSimetrico = vector[i] == vector[vector.length - (i + 1)];
return esSimetrico;
}
}