Я создал объект, подобный этому:
GraphMatrixDirected<String, Integer> g
g передается функции, подобной этой:
floyd(g);
подпись Флойда выглядит так:
public void floyd(GraphMatrixDirected<V,E> g)
Eclipse выдает мне сообщение об ошибке:
The method floyd(GraphMatrixDirected<V,E>) in the type GraphMatrix<V,E> is not applicable for the arguments (GraphMatrixDirected<String,Integer>)
Что мне нужно сделать, чтобы это исправить?
Edit1:
abstract public class GraphMatrix<V,E> extends AbstractStructure<V> implements Graph<V,E>
Правка2:
public interface Graph<V,E> extends Structure<V>
public abstract class AbstractStructure<E> implements Structure<E>
public interface Structure<E> extends Iterable<E>
/* JDT added extension of Iterable for Java 5 */
Правка 3: Примечание: функция была изменена с floyd
на AllPairsShortestPath
.
public void AllPairsShortestPath(GraphMatrixDirected<V,E> g)
// post: g contains edge (a,b) if there is a path from a to b
{
Iterator<V> witer = g.iterator();
while (witer.hasNext())
{
Iterator<V> uiter = g.iterator();
V w = witer.next();
while (uiter.hasNext())
{
Iterator<V> viter = g.iterator();
V u = uiter.next();
while (viter.hasNext())
{
V v = viter.next();
if (g.containsEdge(u,w) && g.containsEdge(w,v))
{
Edge<V,E> leg1 = g.getEdge(u,w);
Edge<V,E> leg2 = g.getEdge(w,v);
Integer leg1Dist = (Integer)leg1.label();
Integer leg2Dist = (Integer)leg2.label();
Integer newDist = (Integer)leg1Dist+leg2Dist;
E newDistE = (E)newDist;
if (g.containsEdge(u,v))
{
Edge<V,E> across = g.getEdge(u,v);
Integer acrossDist = (Integer)across.label();
if (newDist < acrossDist)
{
across.setLabel(newDistE);
}
}
else
{
g.addEdge(u,v,newDistE);
}
}
}
}
}
}