Elev Adores

download Elev Adores

of 22

description

Elevadores

Transcript of Elev Adores

/** * Representa um estado do mundo: Em que * andar cada um dos 5 elevadores esta. */ public class HLAC implements Estado { public String getDescricao() { return "Cinco pessoas estao tentando sair de seus elevadores. \n"+ "Para as portas se abrirem, todos os elevadores devem estar entre os \n"+ "andares 21 e 25. Ha dois botoes: +8 e -13. Esses botoes omente serao a \n"+ "tivados somente quando dois elevadores sao selecionados\n"+ "Inicialmente, os elevadores estao nos andares 17, 26, 20, 19 e 31. \n\n"; } final int Elevador1, Elevador2, Elevador3, Elevador4, Elevador5; // preferir "immutable objects" final String op; // operacao que gerou o estado /** construtor para o estado, recebe cada valor de atributo */ public HLAC(int e1, int e2, int c, int a, int e5, String o) { Elevador1 = e1; Elevador2 = e2; Elevador3 = e3; Elevador4 = e4; Elevador5 = e5; op = o; } /** * verifica se o estado e meta */ public boolean ehMeta() { return e1=21 && e2=21 && e3=21 && e4=21 && e5=21; } /** * Custo para geracao do estado */ public int custo() { return 1; } /** * gera uma lista de sucessores do nodo. */ public List sucessores() { List suc = new LinkedList(); // a lista de sucessores

sobe1sobe2(suc); sobe1dese2(suc); dese1sobe2(suc); dese1dese2(suc); sobe1sobe3(suc); sobe1dese3(suc); dese1sobe3(suc); dese1dese3(suc); sobe1sobe4(suc); sobe1dese4(suc); dese1sobe4(suc); dese1dese4(suc); sobe1sobe5(suc); sobe1dese5(suc); dese1sobe5(suc); dese1dese5(suc); sobe2sobe3(suc); sobe2dese3(suc); dese2sobe3(suc); dese2dese3(suc); sobe2sobe4(suc); sobe2dese4(suc); dese2sobe4(suc); dese2dese4(suc); sobe2sobe5(suc); sobe2dese5(suc); dese2sobe5(suc); dese2dese5(suc); sobe3sobe4(suc); sobe3dese4(suc); dese3sobe4(suc); dese3dese4(suc); sobe3sobe5(suc); sobe3dese5(suc); dese3sube5(suc); dese3dese5(suc); sobe4sobe5(suc); sobe4dese5(suc); dese4sobe5(suc); dese4dese5(suc); return suc; } private void sobe1sobe2(List suc) { e1 +=8; e2 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "Sob1Sob2"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe1dese2(List suc) { e1 +=8; e2 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese1sobe2(List suc) { e1 -=13; e2 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese1dese2(List suc) { e1 -=13; e2 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe1sobe3(List suc) { e1 +=8; e3 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe1dese3(List suc) { e1 +=8; e3 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese1sobe3(List suc) { e1 -=13; e3 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese1dese3(List suc) { e1 -=13; e3 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe1sobe4(List suc) { e1 +=8; e4 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe1dese4(List suc) { e1 +=8; e4 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese1sobe4(List suc) { e1 -=13; e4 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese1dese4(List suc) { e1 -=13; e4 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe1sobe5(List suc) { e1 +=8; e5 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe1dese5(List suc) { e1 +=8; e5 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese1sobe5(List suc) { e1 -=13; e5 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese1dese5(List suc) { e1 -=13; e5 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe2sobe3(List suc) { e2 +=8; e3 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe2dese3(List suc) { e2 +=8; e3 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese2sobe3(List suc) { e2 -=13; e3 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese2dese3(List suc) { e2 -=13; e3 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe2sobe4(List suc) { e2 +=8; e4 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe2dese4(List suc) { e2 +=8; e4 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese2sobe4(List suc) { e2 -=13; e4 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese2dese4(List suc) { e2 -=13; e4 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe2sobe5(List suc) { e2 +=8; e5 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe2dese5(List suc) { e2 +=8; e5 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese1sobe2(List suc) { e1 -=13; e2 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese2dese5(List suc) { e2 -=13; e5 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe3sobe4(List suc) { e3 +=8; e4 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe3dese4(List suc) { e3 +=8; e4 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese3sobe4(List suc) { e3 -=13; e4 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese3dese4(List suc) { e3 -=13; e4 -=13; AQUI HLAC novo = new HLACElevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }LALALA private void sobe3sobe5(List suc) { e3 +=8; e5 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe3dese5(List suc) { e3 +=8; e5 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese3sobe5(List suc) { e3 -=13; e5 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese3dese5(List suc) { e3 -=13; e5 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe4sobe5(List suc) { e4 +=8; e5 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void sobe4dese5(List suc) { e4 +=8; e5 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese4sobe5(List suc) { e4 -=13; e5 +=8; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

private void dese4dese5(List suc) { e4 -=13; e5 -=13; AQUI HLAC novo = new HLAC(Elevador1, Elevador2, Elevador3, Elevador4, Elevador5, "levarC-"+carneiro+novaMargem); if (novo.ehValido()) { suc.add(novo); } } }

/** returna true se o estado e valido */ private boolean ehValido() { if (e149 ) { // Algum elevador acima do andar 49 return false; } return true; } /** * verifica se um estado e igual a outro * (usado para poda) */ public boolean equals(Object o) { if (o instanceof HLAC) { HLAC e = (HLAC)o; return Elevador1=e.e1 && Elevador2==e.e2 && Elevador3==e.e3 && Elevador4==e.e4 && Elevador5==e.e5; } return false; } /** * retorna o hashCode desse estado * (usado para poda, conjunto de fechados) */ public int hashCode() { return (""+Elevador1 + Elevador2 + Elevador3 +Elevador4 +Elevador5).hashCode(); } public String toString() { String dir = ""; // quem esta na dir String esq = ""; // quem esta na esq if (homem == 'd') { dir += 'h'; } else { esq += 'h'; } if (lobo == 'd') { dir += 'l'; } else { esq += 'l'; } if (carneiro == 'd') { dir += 'c'; } else { esq += 'c'; } if (alface == 'd') { dir += 'a'; } else { esq += 'a'; } return esq +"|" + dir + " (" + op + ")\n"; } public static void main(String[] a) { HLAC inicial = new HLAC(17, 26, 20,19, 31, "inicial"); // chama busca em largura System.out.println("busca em largura"); Nodo n = new BuscaLargura().busca(inicial); if (n == null) { System.out.println("sem solucao!"); } else { System.out.println("solucao:\n" + n.montaCaminho() + "\n\n"); } } }