OO dios vendito Dios que estudiamos ingenieria!!!!! vaya que si es bueno leer las viejas notas....
Deacuerdo con el Agrupamiento de nodos vecinos ooo dios que equivocado estaba, bueno en realidad equivocado no pero no tenia una semantica mi codigo ni un Orden!!!!
Pero en que no tenia orden? Cuando buscaba los nodos conectados los buscaba en DESORDEN, que es Raiz,Izquierda,Raiz,Derecha :S bueno igual y no estaba tan mal pero pues en investigaciones futuras de busqueda de caminos nos mostraria datos erroneos
¿A chinga me entendiedon que Dije?
Muy Facil!!!! un arreglo es igual a un ARBOL, entonces los metodos de Ordenamiento de caminos en un arbol para tener como resultado una cadena son:
* N-ORDEN (IRD). Consiste en recorrer el árbol en el orden en que está.
* POST-ORDEN (IDR). Consiste en recorrer las ramas en orden inverso.
* PRE-ORDEN (RID). Consiste en recorrer las ramas desde la raíz hacia abajo.
Entonces para buscar los vecinos (nodos hijos) tenemos que buscalos con un Orden.
Nosotros escojimos RID ya que buscaremos los nodos vecinos primero la RAIZ, luego buscaremos en la parte izquierda y despues en la parte derecha!!!
Y bingo!!!! encontro el orden y nos mando como resultado un mensaje diciendonos el recorrido de los nodos en una cadena!!!
NOTA: esta cadena parece k no nos sirve para NADA pero error
Esta cadena es la representacion de un objeto agrupado, entonces si kieremos saber si en un arreglo A de 100X100 existe dentro de este un arreglo B de 5X5 tomamos las cadenas de cada agrupacion y comparamos una por una!!!! asi si son iguales alguna de ellas nos dira que el objeto del arreglo B esta en el Arreglo A.
Esto es usado en redes neuronales y reconocimiento de patrones asi como tratamiento de imagenes
Miren graficamente asi funciona:
Auuuu!!!
Aqui esta el codiguin por si alguien le interesa
import javax.swing.*;
public class Agrupamiento {
public static void main
(String[] args
) { int grupos=1;
for(int yx=0;yx<=9;yx++){
for(int yy=0;yy<=9;yy++){
arreglo[yx][yy]="0";
}
}
arreglo[4][2]="1";
arreglo[5][3]="1";
arreglo[4][4]="1";
arreglo[4][5]="1";
AgrupamientoVecinos objeto=new AgrupamientoVecinos();
int GruposTotales=objeto.Agrupar(arreglo,"1",true,null);
JOptionPane.
showMessageDialog(null,
"Termino de Buscar en total fueron " + GruposTotales
+ " grupos");
//Comprobacion de los grupos
for(int yx=0;yx<=9;yx++){
for(int yy=0;yy<=9;yy++){
if(arreglo[yx][yy].equals( "0" )==false ){
JOptionPane.
showMessageDialog(null,
"Encontre Agrupaciones con numero "+ arreglo
[yx
][yy
] + " en " + yx
+ "," + yy
);
}
}
}
}
}
class AgrupamientoVecinos{
public int Agrupar
(String ArregloDeBusqueda
[][],
String ValorABuscar,
boolean RenombradoAutomaticoGrupos,
String ValorAModificar
){ int grupos=0;
arreglo=ArregloDeBusqueda;
ValorNuevo=ValorAModificar;
ValorViejo=ValorABuscar;
for(int yx=0;yx<ArregloDeBusqueda.length;yx++){
for(int yy=0;yy<ArregloDeBusqueda[0].length;yy++){
if(ArregloDeBusqueda[yx][yy]==ValorViejo){
if(RenombradoAutomaticoGrupos==false){
grupos++;
this.BuscarVecino(yx,yy,grupos);
}else{
grupos++;
ValorNuevo
=Integer.
toString(grupos
); this.BuscarVecino(yx,yy,grupos);
}
}
}
}
JOptionPane.
showMessageDialog(null,
"Cadena de Recorrido " + CadenaGrafo
[1]); return grupos;
}
public void BuscarVecino(int x,int y,int Grupos){
arreglo[x][y]=ValorNuevo;
//Tipo de Busqueda RID(Raiz-Izquieda-Derecha con Busqueda Descendente)
//Raiz
try{
if(arreglo[x][y-1]==ValorViejo ){
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,";
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"2,";
BuscarVecino(x,y-1,Grupos);
}
try{
if(arreglo[x][y+1]==ValorViejo){
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,";
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"8,";
BuscarVecino(x,y+1,Grupos);
}
//Izquierda
try{
if(arreglo[x-1][y-1]==ValorViejo){
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,";
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"1,";
BuscarVecino(x-1,y-1,Grupos);
}
try{
if(arreglo[x-1][y]==ValorViejo){
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,";
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"4,";
BuscarVecino(x-1,y,Grupos);
}
try{
if(arreglo[x-1][y+1]==ValorViejo){
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,";
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"7,";
BuscarVecino(x-1,y+1,Grupos);
}
//Derecha
try{
if(arreglo[x+1][y-1]==ValorViejo){
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,";
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"3,";
BuscarVecino(x+1,y-1,Grupos);
}
try{
if(arreglo[x+1][y]==ValorViejo){
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,";
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"6,";
BuscarVecino(x+1,y,Grupos);
}
try{
if(arreglo[x+1][y+1]==ValorViejo){
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,";
CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"9,";
BuscarVecino(x+1,y+1,Grupos);
}
}
}