Bom pessoal na faculdade eu cursando 1 cadeira de IA e o professor pediu que pesquisassemos sobre como resolver o quebra cabeças de 8 peças
1 2 3
4 5 6
7 8
bom eu não estou pedindo a resposta apenas que me ajudem a conseguir o raciocinio correto
detalhes
numa matriz de 3x3 gera-se numeros aleatorios não repetidos de 1 a 8, depois deve ser ordenado igual no mostrado acima
se alguem puder ajudar agradeço
Ola …
Cara a maneira mais simples de ser feito isso creio que seja convertendo o array multi-dimensional (matriz) para um array normal (de [][] para []) ai ordenar os elementos depois realimentar a matriz original (não cheira muito bem mas funciona ) …
[code]import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*
-
@author markus
*/
public class OrdenaMatriz {
//matriz meramente ilustrativa
private int[][] matriz = new int[3][3];
private List numeros = new ArrayList();private void gerarNumeros() {
for (int i = 1; i <= 8; i++) {
numeros.add(i);
}
}private void embaralhar() {
Collections.shuffle(numeros);
}private void ordenar(){
Collections.sort(numeros);
}private void alimentarMatriz() {
int posicao = 0;
for (int linha = 0; linha < matriz.length; linha++) {
for (int coluna = 0; coluna < matriz[linha].length; coluna++) {
if (!(linha == matriz.length-1 && coluna == matriz[linha].length-1)) {
matriz[linha][coluna] = numeros.get(posicao++);
}
}
}
}
private void imprimirMatriz() {
StringBuilder sb = new StringBuilder();
for (int linha = 0; linha < matriz.length; linha++) {
StringBuilder sbl = new StringBuilder();
for(int valor : matriz[linha]){
sbl.append(valor+" “);
}
sb.append(sbl);
sb.append(”\n");
}
System.out.println(sb);
}public static void main(String[] args) {
OrdenaMatriz ordenar = new OrdenaMatriz();
ordenar.gerarNumeros();
ordenar.embaralhar();
ordenar.alimentarMatriz();
ordenar.imprimirMatriz();
ordenar.ordenar();
ordenar.alimentarMatriz();
ordenar.imprimirMatriz();
}
}
[/code]
Acho que isso ja ajuda como uma base ao menos …
falou …
Bom o método é o seguinte:
public static int [][] criarMatriz (int x,int y){
int a[][] = new int [x][y];
for (int i= 0;i < x ; i++){
for (int j= 0;j < y ; j++){
a[i][j]= (int) (Math.random()*8) ;
}
}
return a;
}
a questão é:
eu preciso de numeros aleatorios entr 0 e 8 e não repetidos
wlw
Acredito eu que você vá ter que usar algum algoritmo mais inteligente que esses de ordenação pra resolver seu problema. Não tenho certeza, mas acredito que o A* já consiga resolver esse problema. Obviamente, existem outras técnicas que podem ser mais rápidas, como programação dinâmica. Mas acho que varia muito. O A*, para o que você precisa, pode ser o mais básico e rápido de fazer. Algumas outras técnicas também podem ser abordadas, como AG.