Graph Tour with Uniform Cost Search in Java

Posted by user324817 on Stack Overflow See other posts from Stack Overflow or by user324817
Published on 2010-04-24T08:02:10Z Indexed on 2010/04/24 8:13 UTC
Read the original article Hit count: 181

Hi. I'm new to this site, so hopefully you guys don't mind helping a nub.

Anyway, I've been asked to write code to find the shortest cost of a graph tour on a particular graph, whose details are read in from file. The graph is shown below:

http://img339.imageshack.us/img339/8907/graphr.jpg

This is for an Artificial Intelligence class, so I'm expected to use a decent enough search method (brute force has been allowed, but not for full marks).

I've been reading, and I think that what I'm looking for is an A* search with constant heuristic value, which I believe is a uniform cost search. I'm having trouble wrapping my head around how to apply this in Java.

Basically, here's what I have:

Vertex class -

ArrayList<Edge> adjacencies;
String name;
int costToThis;

Edge class -

final Vertex target;
public final int weight;

Now at the moment, I'm struggling to work out how to apply the uniform cost notion to my desired goal path. Basically I have to start on a particular node, visit all other nodes, and end on that same node, with the lowest cost.

As I understand it, I could use a PriorityQueue to store all of my travelled paths, but I can't wrap my head around how I show the goal state as the starting node with all other nodes visited.

Here's what I have so far, which is pretty far off the mark:

public static void visitNode(Vertex vertex) {
      ArrayList<Edge> firstEdges = vertex.getAdjacencies();
      for(Edge e : firstEdges) {
         e.target.costToThis = e.weight + vertex.costToThis;
         queue.add(e.target);
      }
      Vertex next = queue.remove();
      visitNode(next);
   }

Initially this takes the starting node, then recursively visits the first node in the PriorityQueue (the path with the next lowest cost).

My problem is basically, how do I stop my program from following a path specified in the queue if that path is at the goal state? The queue currently stores Vertex objects, but in my mind this isn't going to work as I can't store whether other vertices have been visited inside a Vertex object.

Help is much appreciated! Josh

© Stack Overflow or respective owner

Related posts about java

Related posts about artificial-intelligence