Inteligencia Artificial

3 respostas
S

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

3 Respostas

Markus_Alemao

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 :D ) ...

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
 *
 * @author markus
 */
public class OrdenaMatriz {
    //matriz meramente ilustrativa :D
    private int[][] matriz = new int[3][3];
    private List<Integer> numeros = new ArrayList<Integer>();

    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();
     }
}

Acho que isso ja ajuda como uma base ao menos ....

falou .......

S

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

Andre_Brito

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.

Criado 1 de abril de 2011
Ultima resposta 4 de abr. de 2011
Respostas 3
Participantes 3