AYUDA!!!!
ok, este es el problema, estoy implementando un DFS para, dados dos nodos (amigos) me recorra el grafo y me devuelva una posible cadena de comunicación. este es el código de ese procedimiento, lo que pasa es que en la recursividad se pierde....
public void recorrerDFS( String amigo1, String amigo2)
{
int numeroUsuarios= Usuario.user.size();
Usuario temp;
ultimaNumeracion = 0;
numeracionNodos = new int[numeroUsuarios];
//System.out.println("DENTRO DE RECORRER DFS");
Arrays.fill(numeracionNodos, -1);
for ( int i=0; i<numeroUsuarios; i++)
{
temp=(Usuario)user.elementAt(i);
if(temp.nombre.equals(amigo1))
if( numeracionNodos[i]==-1 )
{
System.out.println("DENTRO DE RECORRER DFS");
dfs(i,amigo2);
}
// Usuario.cadena.clear();
// System.out.println("borre cadena");
}
}
/****************************************************************************/
private void dfs( int nodo, String amigo )
{
int numeroUsuarios= Usuario.user.size();
Usuario temp2= new Usuario ();
System.out.print("Estoy en dfs");
numeracionNodos[nodo] = ultimaNumeracion ++;
// busca todos los adyacentes
for( int i=0; i<numeroUsuarios; i++ )
{
System.out.print("Estoy en el for");
if( (Lados.matrizAdyacencia[nodo][i]==1) && (numeracionNodos[i]==-1) )
{
// hacer algo con el nodo
temp2= (Usuario) user.elementAt(i);
if (temp2.nombre.equals(amigo))
{
System.out.print("Estoy en el if");
cadena.addElement(amigo);
return;
}
else
{
Usuario.cadena.addElement(amigo);
System.out.print("aqui acabo de agregar a boris");
dfs( i,amigo );
}
}
}
}
de verdad me ayudarían mucho porque ya no sé qué hacer!!!
Gracias
public void recorrerDFS( String amigo1, String amigo2)
{
int numeroUsuarios= Usuario.user.size();
Usuario temp;
ultimaNumeracion = 0;
numeracionNodos = new int[numeroUsuarios];
//System.out.println("DENTRO DE RECORRER DFS");
Arrays.fill(numeracionNodos, -1);
for ( int i=0; i<numeroUsuarios; i++)
{
temp=(Usuario)user.elementAt(i);
if(temp.nombre.equals(amigo1))
if( numeracionNodos[i]==-1 )
{
System.out.println("DENTRO DE RECORRER DFS");
dfs(i,amigo2);
}
// Usuario.cadena.clear();
// System.out.println("borre cadena");
}
}
/****************************************************************************/
private void dfs( int nodo, String amigo )
{
int numeroUsuarios= Usuario.user.size();
Usuario temp2= new Usuario ();
System.out.print("Estoy en dfs");
numeracionNodos[nodo] = ultimaNumeracion ++;
// busca todos los adyacentes
for( int i=0; i<numeroUsuarios; i++ )
{
System.out.print("Estoy en el for");
if( (Lados.matrizAdyacencia[nodo][i]==1) && (numeracionNodos[i]==-1) )
{
// hacer algo con el nodo
temp2= (Usuario) user.elementAt(i);
if (temp2.nombre.equals(amigo))
{
System.out.print("Estoy en el if");
cadena.addElement(amigo);
return;
}
else
{
Usuario.cadena.addElement(amigo);
System.out.print("aqui acabo de agregar a boris");
dfs( i,amigo );
}
}
}
}
de verdad me ayudarían mucho porque ya no sé qué hacer!!!
Gracias
olvidenlo!... ya lo arreglé. necesitaba una variable global y estaba local
les mando el corregido po si acaso están interesados
/****************************************************************************/
public void recorrerDFS( String amigo1, String amigo2)
{
int numeroUsuarios= Usuario.user.size();
Usuario temp;
ultimaNumeracion = 0;
numeracionNodos = new int[numeroUsuarios];
Arrays.fill(numeracionNodos, -1);
for ( int i=0; i<numeroUsuarios; i++)
{
temp=(Usuario)user.elementAt(i);
if(temp.nombre.equals(amigo1))
{
cadena.addElement(amigo1);
if( numeracionNodos[i]==-1 )
{
System.out.println("DENTRO DE RECORRER DFS");
dfs(i,amigo2);
return;
}
}
}
}
/****************************************************************************/
private void dfs( int nodo, String amigo )
{
int numeroUsuarios= Usuario.user.size();
Usuario temp2= new Usuario ();
numeracionNodos[nodo] = ultimaNumeracion ++;
// busca todos los adyacentes
for( int i=0; i<numeroUsuarios; i++ )
{
if( (Lados.matrizAdyacencia[nodo][i]==1) && (numeracionNodos[i]==-1) )
{
if (parada!=1)
{
temp2= (Usuario) user.elementAt(i);
if (temp2.nombre.equals(amigo))
{
cadena.addElement(amigo);
parada=1;
System.out.println("Parada:"+parada);
return;
}
else
{
Usuario.cadena.addElement(temp2.nombre);
dfs( i,amigo );
}
}
else
{
System.out.println("estoy en parada "+parada);
return;
}
}
}
}
/*******************************************/
las variables no declaradas están globales
les mando el corregido po si acaso están interesados
/****************************************************************************/
public void recorrerDFS( String amigo1, String amigo2)
{
int numeroUsuarios= Usuario.user.size();
Usuario temp;
ultimaNumeracion = 0;
numeracionNodos = new int[numeroUsuarios];
Arrays.fill(numeracionNodos, -1);
for ( int i=0; i<numeroUsuarios; i++)
{
temp=(Usuario)user.elementAt(i);
if(temp.nombre.equals(amigo1))
{
cadena.addElement(amigo1);
if( numeracionNodos[i]==-1 )
{
System.out.println("DENTRO DE RECORRER DFS");
dfs(i,amigo2);
return;
}
}
}
}
/****************************************************************************/
private void dfs( int nodo, String amigo )
{
int numeroUsuarios= Usuario.user.size();
Usuario temp2= new Usuario ();
numeracionNodos[nodo] = ultimaNumeracion ++;
// busca todos los adyacentes
for( int i=0; i<numeroUsuarios; i++ )
{
if( (Lados.matrizAdyacencia[nodo][i]==1) && (numeracionNodos[i]==-1) )
{
if (parada!=1)
{
temp2= (Usuario) user.elementAt(i);
if (temp2.nombre.equals(amigo))
{
cadena.addElement(amigo);
parada=1;
System.out.println("Parada:"+parada);
return;
}
else
{
Usuario.cadena.addElement(temp2.nombre);
dfs( i,amigo );
}
}
else
{
System.out.println("estoy en parada "+parada);
return;
}
}
}
}
/*******************************************/
las variables no declaradas están globales