2015-07-25 1 views
0

J'essaie de modifier les fonctions du Jgrapht pour prendre comme paramètres le couple de coordonnées d'un point (int, int). Je crée une classe et un objet point défini par (x, y) et le mettre comme paramètre de la directedGraphErreur lors du changement de paramètre de méthode vers un objet (bibliothèque jgrapht)

public class Point { 

     public int x; 
     public int y; 

     public Point(int x, int y) 
     { 
     this.x = x; 
     this.y = y; 
     } 
     @Override 
     public String toString() { 
     return ("[x="+x+" y="+y+"]"); 
     } 
    } 
    // -------------------------------------------------------------- 

    public class DirectedGraphDemo { 
     public void graph(String args[]) { 

     //Create the directed graph 
     public DirectedGraph<Point, DefaultEdge> directedGraph = new DefaultDirectedGraph<Point, DefaultEdge>(DefaultEdge.class); 

     // constructs a directed graph with the specified vertices and edges 

     directedGraph.addVertex(1,2); 
     directedGraph.addVertex(1,3); 
     directedGraph.addVertex(1,4); 

     directedGraph.addEdge((1,2),(1,3)); 
     directedGraph.addEdge((1,3),(1,4)); 
     directedGraph.addEdge((1,4),(1,2)); 

     // computes all the strongly connected components of the directed graph 
     StrongConnectivityInspector sci = 
      new StrongConnectivityInspector(directedGraph); 
     List stronglyConnectedSubgraphs = sci.stronglyConnectedSubgraphs(); 

     // prints the strongly connected components 
     System.out.println("Strongly connected components:"); 
     for (int i = 0; i < stronglyConnectedSubgraphs.size(); i++) { 
      System.out.println(stronglyConnectedSubgraphs.get(i)); 
     } 
     System.out.println(); 

     // Prints the shortest path from vertex i to vertex c. This certainly 
     // exists for our particular directed graph. 
     System.out.println("Shortest path from (1,2) to (1,3):"); 
     List path = 
      DijkstraShortestPath.findPathBetween(directedGraph, (1,2),(1,3); 
     System.out.println(path + "\n"); 

     // Prints the shortest path from vertex c to vertex i. This path does 
     // NOT exist for our particular directed graph. Hence the path is 
     // empty and the variable "path"; must be null. 
     System.out.println("Shortest path from (1,2) to (1,3):"); 
     path = DijkstraShortestPath.findPathBetween(directedGraph, (1,2), (1,3)); 
     System.out.println(path); 
     } 
    } 

Ce que je suis en train de faire est d'être en mesure d'utiliser:

directedGraph.addVertex(x1,y1); 
directedGraph.addVertex(x2,y2); 
directedGraph.addEdge((x1,y1), (x2,y2)); 
path = DijkstraShortestPath.findPathBetween(directedGraph,(x1,y1),(x2,y2)); 

Quand je cours le code, j'obtiens l'erreur "la méthode addVertex n'est pas applicable pour l'argument (int, int)" même quand le paramètre est Point, qui est défini par (int, int). Comment dois-je procéder pour que cela fonctionne?

J'utilise le traitement qui est basé sur Java

Répondre

1

Des questions comme celles-ci sont la meilleure réponse en regardant the API.

La fonction addVertex() prend un paramètre Point, comme vous l'avez spécifié dans vos arguments génériques. Vous ne pouvez pas simplement substituer dans deux valeurs int et attendre que cela fonctionne. Au lieu de cela, vous devez fournir une valeur Point:

directedGraph.addVertex(new Point(1,2)); 

De même, vous devez passer des valeurs de point à la fonction DijkstraShortestPath.findPathBetween() ainsi:

path = DijkstraShortestPath.findPathBetween(directedGraph, new Point(x1,y1),new Point(x2,y2));