Inteligencia Artificial

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 :smiley: ) …

[code]import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*

  • @author markus
    */
    public class OrdenaMatriz {
    //matriz meramente ilustrativa :smiley:
    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.