Linux en Espanol Espontaneas - De tu ojo a la web
 
Grafos en Java, implementación (tema #18590)
Publicar nuevo tema   Responder al tema    Foros de discusión -> Programación
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Gromlok
Invitado





MensajePublicado: Sab May 12, 2007 5:49 pm    Asunto: Grafos en Java, implementación Responder citando

Hola a todos, esta es mi situación:
Tengo que implementar un grafo con una matríz de vectores -matríz de adyacencias-. Tengo una clase nodo, con el atributo nombre y otro con la posición del nodo en la matríz. Hay otras especificaciones de lador, grafo, etc, pero mi problema se limita a esto que les comento.

Mi matríz la creo como sigue -nada muy complicado-, "n" el numero de nodos:
Código:

public static Vector crearGrafo(int n) {
      Vector matrizAdya = new Vector();
      for (int i = 0; i < n; i++){
         matrizAdya.addElement(new Vector());
      }
      return (matrizAdya);
   }


Bueno, ahora quiero agregar un nodo -a un grafo No dirigido, auqnue al dirigido debe ser lo mismo-, hago lo siguiente:
Código:

public static void agregarNodo(nodo nodo, Vector matrizAdya){
      if (matrizAdya == null) {
         matrizAdya.addElement(new nodo("utu", 5));
      } else {
         for (int i = 0; i < matrizAdya.size(); i++){
            
            if (nodo.nombreNodo == (nodo)matrizAdya.get(i)){
               System.out.println("El nodo ya se encuentra en el grafo");
            } else {
               matrizAdya.addElement(new nodo("utu", 5));
            }
         }
      }
}

Es sólo una prueba, así que no presten atención a ese new nodo, con esos datos. En fin, cuando voy a hacer la revisión de la matríz para ver si el nodo que voy a agregar está en el grafo, pensaba comparar el nombre del nodo -nodo.nombreNodo-, con los datos de la matríz -matrizAdya.get(i)-, como pueden ver en el IF.

Traté de convertir mi matrizAdya en tipo nodo -con el casting- pero no me sale el atributo, ".nodoNombre" -aún convertido en tipo nodo-., pero no funciona, me da error.

Alguna sugerencia?
Volver arriba
TocMor
Forista


Registrado: 09 May 2007
Mensajes: 6

MensajePublicado: Lun May 14, 2007 10:32 am    Asunto: Responder citando

Hola.

úPuedes decirme exactamente que error te da?

Por lo que veo estas creando la matriz con Vector al añades objetos del tipo Vector.

úEn el metodo public static void agregarNodo(nodo nodo, Vector matrizAdya), matrizAdya es el objeto devuelto por public static Vector crearGrafo(int n)?

Por que si es asi deberia darde un ClassCastException ya que
al hacer (nodo)matrizAdya.get(i) se estaria devolviendo un objeto Vector y no puede convertirse en un objeto del tipo nodo.

úEs asi? o el parametro recibido no es el mismo que el crearo en crearGrafo(int)?

Espero que esto te sirva.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
TocMor
Forista


Registrado: 09 May 2007
Mensajes: 6

MensajePublicado: Lun May 14, 2007 10:32 am    Asunto: Responder citando

Hola.

úPuedes decirme exactamente que error te da?

Por lo que veo estas creando la matriz con Vector al añades objetos del tipo Vector.

úEn el metodo public static void agregarNodo(nodo nodo, Vector matrizAdya), matrizAdya es el objeto devuelto por public static Vector crearGrafo(int n)?

Por que si es asi deberia darde un ClassCastException ya que
al hacer (nodo)matrizAdya.get(i) se estaria devolviendo un objeto Vector y no puede convertirse en un objeto del tipo nodo.

úEs asi? o el parametro recibido no es el mismo que el crearo en crearGrafo(int)?

Espero que esto te sirva.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
demasiadovivo
Forista


Registrado: 25 May 2005
Mensajes: 665
Ubicación: secret place

MensajePublicado: Lun May 21, 2007 5:41 am    Asunto: Responder citando

Código:

public static void agregarNodo(nodo nodo, Vector matrizAdya){
      if (matrizAdya == null) {
         matrizAdya.addElement(new nodo("utu", 5));
      } else {
         for (int i = 0; i < matrizAdya.size(); i++){
           
            if (nodo.nombreNodo == (nodo)matrizAdya.get(i)){
               System.out.println("El nodo ya se encuentra en el grafo");
            } else {
               matrizAdya.addElement(new nodo("utu", 5));
            }
         }
      }
}

Tenes un par de errores, voy por partes. Primero estas cometiendo un error en el if, si matrizAdya es null no va a estar asociada a ningun objeto y por lo tanto no podes hacer un matrizAdya.addElement(new nodo("utu", 5)); acordate q matrizAdya es null, primero tendrias q asignar un objeto a esa variable, por ejemplo con matrizAdya = new Vector().

Ahora vamos a tu problema puntual. El problema es q estas comparando un objeto nodo con un objeto String (supongo q nombreNodo es un string no?), para hacer lo que vos queres tendrias q hacer esto:
Código:

public static void agregarNodo(nodo nodo, Vector matrizAdya){
      if (matrizAdya == null) {
         matrizAdya = new Vector();  // PRESTA ATENCION A ESTO
         matrizAdya.addElement(new nodo("utu", 5));
      } else {
         for (int i = 0; i < matrizAdya.size(); i++){
           
            if (nodo.nombreNodo == ((nodo)matrizAdya.get(i)).nombreNodo){   //<---- esta es la linea q tenes mal, deberia ser como lo estoy poniendo.
               System.out.println("El nodo ya se encuentra en el grafo");
            } else {
               matrizAdya.addElement(new nodo("utu", 5));
            }
         }
      }
}

Puede que le haya errado con los parentesis en el cast, pero asi deberia andar.
Saludos
_________________
IT Freek Zone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Publicar nuevo tema   Responder al tema    Foros de discusión -> Programación Todas las horas son GMT
Página 1 de 1

 
Cambiar a:  
Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro




La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute",
el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute,
the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries
Powered by phpBB © 2001, 2002 phpBB Group

Contactos