public void method(DemoPanel panel) { final Node[] nodes = panel.getNodes().toArray(new Node[] {}); boolean[][] edges = new boolean[nodes.length][nodes.length]; if (nodes.length > 1) { Edge e; boolean[] close = new boolean[nodes.length]; Heap<Edge> open = new Heap<Edge>( 11, new Comparator<Edge>() { public int compare(Edge o1, Edge o2) { double diff = o1.cost - o2.cost; if (diff > 0) { return 1; } else if (diff < 0) { return -1; } else { return 0; } } }); int index = 0; close[index] = true; do { for (int i = 0; i < nodes.length; i++) { if (i != index) { if (!close[i]) { open.add(new Edge(index, i, nodes[index].getDistance(nodes[i]))); } } } e = open.poll(); if (e == null) { break; } edges[e.s][e.t] = true; index = e.t; close[index] = true; panel.set(edges); } while (open.size() > 0); panel.set(edges); } }