Me autorespondo, había que copiar la matriz posición por posición y ahora si funciona.
Podéis cerrar el post!
Enviado desde mi Aquaris_M4.5 mediante Tapatalk
Podéis cerrar el post!
Enviado desde mi Aquaris_M4.5 mediante Tapatalk
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menúpackage Puzzle;
import java.util.ArrayList;
import java.util.Arrays;
public class Estado {
//public Estado(){
//}
public boolean esObjetivo(int [][] estadoactual){
int cont1=0;
int [][] objetivo = new int[estadoactual.length][estadoactual[0].length];
for(int i = 0; i < estadoactual.length; i++){//Creamos la matriz de la solucion: 0,1,2,3,4,5,6...etc
for(int j=0; j < estadoactual[0].length; j++){
estadoactual[i][j]=cont1;
cont1++;
}
}
return Arrays.equals(estadoactual, objetivo);//Si son iguales true, si no false
}
public int[] obtenerNegra(int [][] actual){
int[] posiciones=new int[2];
for(int i=0; i<actual.length;i++){
for(int j=0; j<actual[0].length; j++){
if(actual[i][j]==0){
posiciones[0]=i;
posiciones[1]=j;
}
}
}
return posiciones;
}
public ArrayList<int [][]> Sucesores(int [][] estado){
ArrayList<int [][]> sucesores = new ArrayList<int [][]>();
int [][] estfinal = new int[estado.length][estado[0].length];
int [] posicionesNegra= obtenerNegra(estfinal);
ArrayList<Integer> lmv = mvmValidos(estfinal, posicionesNegra[1], posicionesNegra[0]);
for(int i =0; i < lmv.size(); i++){
estfinal=estado;
int [][] nuevaMatriz = mover(estfinal, lmv.get(i),posicionesNegra[1] , posicionesNegra[0]); // Matriz actualizada con el movimiento realizado
//ArrayList<int [][]> nuevaLista = new ArrayList<int [][]>();
prinstate(nuevaMatriz);
sucesores.add(nuevaMatriz);
}
return sucesores;
}
public int [][] mover(int [][] estadoact,int movimientos, int ynegra, int xnegra){
int [][] nm = new int[estadoact.length][estadoact[0].length];//Nueva matriz para aplicar el movimiento
nm=estadoact;
int aux=0;
if(movimientos==3){ // Mueve hacia la izquierda (Left)
aux=nm[xnegra][ynegra];
nm[xnegra][ynegra]= nm[xnegra][ynegra-1];
nm[xnegra][ynegra-1]= aux;
}
if(movimientos==2){ // Mueve hacia la derecha (Right)
aux=nm[xnegra][ynegra];
nm[xnegra][ynegra]= nm[xnegra][ynegra+1];
nm[xnegra][ynegra+1]= aux;
}
if(movimientos==1){ // Mueve hacia abajo (Down)
aux=nm[xnegra][ynegra];
nm[xnegra][ynegra]= nm[xnegra+1][ynegra];
nm[xnegra+1][ynegra]= aux;
}
if(movimientos==0){ // Mueve hacia arriba (Up)
aux=nm[xnegra][ynegra];
nm[xnegra][ynegra]= nm[xnegra-1][ynegra];
nm[xnegra-1][ynegra]= aux;
}
return nm;
}
public void prinstate(int [][] estadoactual){
String estado="";
for(int i=0;i<estadoactual.length;i++){
for(int j=0; j < estadoactual.length; j++){
estado = estado + Integer.toString(estadoactual[i][j])+" ";
}
}
System.out.println(estado);
}
public ArrayList<Integer> mvmValidos(int [][] estadoactual, int ynegra, int xnegra){ // Este metodo devuelve una lista con los movimientos validos del cuadro "Vacio(negro)".
ArrayList<Integer> movimientos=new ArrayList<Integer>();
movimientos.add(0);//up
movimientos.add(1);//down
movimientos.add(2); //right
movimientos.add(3);//left
if(ynegra==0){ // Segun en que parte del puzzle se encuentre se eliminaran los posibles movimientos para que en la lista solo queden los validos.
movimientos.remove(3); //Left
}
if(ynegra==estadoactual[0].length-1){
movimientos.remove(2); //Rigth
}
if(xnegra==0){
movimientos.remove(0);//Up
}
if(xnegra==estadoactual.length-1){
movimientos.remove(1); //Down
}
return movimientos;
}
}
Cita de: rbtrece en 7 Noviembre 2016, 21:53 PMLo de borrar el fichero ya esta arreglado, era poner un segundo argumento en FileWriter("fichero.txt",true); y ya no se borra,Imagino que tendrás que recorrer el fichero hasta la posición que quieres y simplemente escribir sobre él.
Lo que pasa que no se como escribir en la mitad del fichero.
Cita de: engel lex en 5 Noviembre 2016, 16:11 PMOk, buscaré y os comentaré! Muchas gracias
Si, eso te digo gparted tienes opciones para eso y sería lo ideal porque clonar una partición corriendo en el sistema operativo de ella puede llevar a errores