public clsNo(int[,] estado, clsNo pai, string mov, int profundidade) { lstSucessor = new List <clsNo>(); this.nome = staticNome++; this.profundidade = profundidade; this.movimentoAnt = mov; this.estado = estado; this.pai = pai; }
public static int getObjetivo(clsNo no) { int retorno = 0; int[,] solucao = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 0 } }; int[,] estado = no.estado; for (int a = 0; a < 3; a++) { for (int b = 0; b < 3; b++) { if (estado[a, b] == solucao[a, b]) { retorno++; } } } return(retorno); // Solução == 9 }
public static clsNo setSucessor(clsNo no) { int[,] estado = no.estado; int[,] estadoAux; int pro = no.profundidade + 1; // Profundidade dos sucessores int i = 0, j = 0, n = 0; // Verifica onde a peça em branco está for (int a = 0; a < 3; a++) { for (int b = 0; b < 3; b++) { if (estado[a, b] == 0) { i = a; j = b; } } } // Verifica os novos estados possíveis //move para cima if (!no.movimentoAnt.Equals("down")) { estadoAux = getCopiarEstado(estado); n = i - 1; if (n >= 0) { estadoAux[i, j] = estadoAux[n, j]; estadoAux[n, j] = 0; no.addSucessor(new clsNo(estadoAux, no, "up", pro)); } } //move para baixo if (!no.movimentoAnt.Equals("up")) { estadoAux = getCopiarEstado(estado); n = i + 1; if (n <= 2) { estadoAux[i, j] = estadoAux[n, j]; estadoAux[n, j] = 0; no.addSucessor(new clsNo(estadoAux, no, "down", pro)); } } //move para esquerda if (!no.movimentoAnt.Equals("right")) { estadoAux = getCopiarEstado(estado); n = j - 1; if (n >= 0) { estadoAux[i, j] = estadoAux[i, n]; estadoAux[i, n] = 0; no.addSucessor(new clsNo(estadoAux, no, "left", pro)); } } //move para direita if (!no.movimentoAnt.Equals("left")) { estadoAux = getCopiarEstado(estado); n = j + 1; if (n <= 2) { estadoAux[i, j] = estadoAux[i, n]; estadoAux[i, n] = 0; no.addSucessor(new clsNo(estadoAux, no, "right", pro)); } } return(no); }
public void addSucessor(clsNo no) { this.lstSucessor.Add(no); }