Page 293 - The Definitive Guide to Building Java Robots
P. 293

Preston_5564C07.fm  Page 274  Monday, September 26, 2005  5:38 AM



                 274    CHAPTER 7  ■  NAVIGATION



                            public Vertex extractMinimum() {
                                Iterator i = unsettled.iterator();
                                int min = Integer.MAX_VALUE;
                                Vertex minV = null;
                                while (i.hasNext()) {
                                    Vertex tmp = (Vertex) i.next();
                                    if (getShortDistance(tmp) < min) {
                                        min = getShortDistance(tmp);
                                        minV = tmp;
                                    }
                                }
                                unsettled.remove(minV);
                                return minV;
                            }

                            public void relaxNeighbors(Vertex u) {
                                int[][] adj = getAdj();
                                int size = vertices.size();
                                for (int i = 0; i < size; i++) {
                                    Vertex vi = (Vertex) vertices.get(i);
                                    if (vi.equals(u)) { // only check this i'th column
                                        for (int j = 0; j < size; j++) {
                                            Vertex v = (Vertex) vertices.get(j);
                                            int w2 = adj[i][j];
                                            // should give all adjacent vertices not settled
                                            if (w2 > 0 && w2 < Integer.MAX_VALUE
                                                    && (settled.contains(v) == false)) {
                                                // does a shorter distance exist?
                                                if (getShortDistance(v) > getShortDistance(u)
                                                        + getDist(u, v)) {
                                                    int d = getShortDistance(u) + getDist(u, v);
                                                    setShortDistance(v, d);
                                                    setPred(v,u);
                                                }
                                            }


                                        }
                                    }

                                }
                            }


                            public ArrayList getShortestPath( Vertex start, Vertex end) {
                                unsettled.add(start);
                                setShortDistance(start,0);
                                while (unsettled.size() > 0) {
   288   289   290   291   292   293   294   295   296   297   298