• Sábado 4 de Mayo de 2024, 09:35

Autor Tema:  Dudas con parametros para este método  (Leído 2030 veces)

Gaudy

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Dudas con parametros para este método
« en: Domingo 3 de Julio de 2011, 23:45 »
0
Buenas, necesito hacer funcionar el Algoritmo de Edmonds-Karp que encuentra el Flujo Maximo de un Grafo. Si bien me conseguí la implementacion en Java, pero me hace falta entender que parametros exactamente me pide el método.

Por cierto:
C: es la matriz de representacion del Grafo
E: ?
s: nodo de inicio
t: nodo destino

Mi dudas son:
Si fuera posible que alguien me explicara que es el E, se q es una matriz, pero no se de que. En el parametro me piden los nodos s y t, pero en ¿¿formato int??

[php:3mfhc41b]
  1. import java.util.*;
  2.  
  3. /**
  4.  * Finds the maximum flow in a flow network.
  5.  * @param E neighbour lists
  6.  * @param C capacity matrix (must be n by n)
  7.  * @param s source
  8.  * @param t sink
  9.  * @return maximum flow
  10.  */
  11. public class EdmondsKarp {
  12.     public static int edmondsKarp(int[][] E, int[][] C, int s, int t) {
  13.         int n = C.length;
  14.         // Residual capacity from u to v is C[v] - F[v]
  15.         int[][] F = new int[n][n];
  16.         while (true) {
  17.             int[] P = new int[n]; // Parent table
  18.             Arrays.fill(P, -1);
  19.             P[s] = s;
  20.             int[] M = new int[n]; // Capacity of path to node
  21.             M[s] = Integer.MAX_VALUE;
  22.             // BFS queue
  23.             Queue<Integer> Q = new LinkedList<Integer>();
  24.             Q.offer(s);
  25.             LOOP:
  26.             while (!Q.isEmpty()) {
  27.                 int u = Q.poll();
  28.                 for (int v : E[u]) {
  29.                     // There is available capacity,
  30.                     // and v is not seen before in search
  31.                     if (C[u][v] - F[u][v] > 0 && P[v] == -1) {
  32.                         P[v] = u;
  33.                         M[v] = Math.min(M[u], C[u][v] - F[u][v]);
  34.                         if (v != t)
  35.                             Q.offer(v);
  36.                         else {
  37.                             // Backtrack search, and write flow
  38.                             while (P[v] != v) {
  39.                                 u = P[v];
  40.                                 F[u][v] += M[t];
  41.                                 F[v][u] -= M[t];
  42.                                 v = u;
  43.                             }
  44.                             break LOOP;
  45.                         }
  46.                     }
  47.                 }
  48.             }
  49.             if (P[t] == -1) { // We did not find a path to t
  50.                 int sum = 0;
  51.                 for (int x : F[s])
  52.                     sum += x;
  53.                 return sum;
  54.             }
  55.         }
  56.     }
  57. }
[/php:3mfhc41b]

j0k3r.

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re:Dudas con parametros para este método
« Respuesta #1 en: Martes 29 de Noviembre de 2011, 07:08 »
0
hay te dice en la linea 5  * @param E neighbour lists son los vecinos que se encuentran directamente conectados por las aristas con el nodo base.... Saludos!!!