• 04-27-2012, 10:20 AM
Betty7
Hi,
I'm a beginner in Java programming. Sorry for any silly mistakes :(nerd): I'm trying to do a uniform cost search program on a graph but I have some problems in the code.
I'm not sure if my algorithm works correctly or not.
This is the problem I get:

Exception in thread "main" java.lang.ClassCastException: Edge cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(PriorityQ ueue.java:578)
at java.util.PriorityQueue.siftUp(PriorityQueue.java: 574)
at java.util.PriorityQueue.offer(PriorityQueue.java:2 74)
at UCS.UnifromCostSearch(UCS.java:86)
at UCS.main(UCS.java:115)

This is my program:

Code:

```import java.util.*; class Vertex {         public String name;         public Vertex Parent;         public Edge[] adjacencies;         public int weight;         public Vertex vertex;                         public Vertex(String vertexName)         {                 name = vertexName;         }                                 public int getWeight()         {                 return weight;         }                 public void setWeight(int vertexWeight )         {                 weight = vertexWeight;         }                                 public Edge[] getAdjacencies()         {                 return adjacencies;         }                 public void setAdjacencies(Edge[] adjacencies)         {                 this.adjacencies = adjacencies;         } }   class Edge {         public int weight;         public Vertex vertex;                         public Edge(Vertex vertexTarg, int vertexWeight)         {                 vertex = vertexTarg;                 weight = vertexWeight;         }         } public class UCS {                 public static void UnifromCostSearch(Vertex Start, Vertex Goal)         {                 PriorityQueue Fringe = new PriorityQueue();                 ArrayList explored = new ArrayList();                 Fringe.add(Start);                 int cost =0;                                         Vertex goal = Goal;                         while(!Fringe.isEmpty())                 {                         Vertex Parent = (Vertex)Fringe.poll();                                         cost += Parent.getWeight();                                         if(Parent == goal)                     {                                 System.out.println("Goal is found: " + goal);                                 break;                         }                                         explored.add(Parent);                                                                Edge[] children = Parent.getAdjacencies();                                                         for(int i =0; i < children.length;i++)                         {                                 Fringe.add(children[i]);                         }                                                                 }         }         public static void main(String[] args) {     Vertex v0 = new Vertex("Redvile");         Vertex v1 = new Vertex("Blueville");         Vertex v2 = new Vertex("Greenville");         Vertex v3 = new Vertex("Orangeville");         Vertex v4 = new Vertex("Purpleville");         v0.adjacencies = new Edge[]{ new Edge(v1, 5),                                     new Edge(v2, 10),                                 new Edge(v3, 8) };         v1.adjacencies = new Edge[]{ new Edge(v0, 5),                                     new Edge(v2, 3),                                     new Edge(v4, 7) };         v2.adjacencies = new Edge[]{ new Edge(v0, 10),                                 new Edge(v1, 3) };         v3.adjacencies = new Edge[]{ new Edge(v0, 8),                                     new Edge(v4, 2) };         v4.adjacencies = new Edge[]{ new Edge(v1, 7),                                 new Edge(v3, 2) };         Vertex[] vertices = { v0, v1, v2, v3, v4 };             UnifromCostSearch(v0, v4);   } }```
Any help is greatly appreciated :(blush):
• 04-27-2012, 10:36 AM
JosAH