PriorityQueue not working properly

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • jinnejeevansai
    New Member
    • Nov 2014
    • 48

    PriorityQueue not working properly

    I have made a priorityqueue which inserts objects and compares them with cost parameter ,when two costs are equal it should keep them in enqueued order,but i found after debugging one time it is in enqueued order and other time it is not in the order but i am not getting what is wrong with my code

    Code:
    /* package whatever; // don't place package name! */
    
    import java.util.*;
    import java.lang.*;
    import java.io.*;
    
    class node implements Comparable < node > {
    
      int x;
      int y;
      int dir;
    
      node(int x, int y, int dir) {
        this.x = x;
        this.y = y;
        this.dir = dir;
      }
    
      public int compareTo(node o) {
    
        if (Ideone.cost[o.x][o.y] == Ideone.cost[x][y])
          return 1;
        else {
          int d = Ideone.cost[x][y] - Ideone.cost[o.x][o.y];
          if (d > 0)
            return 1;
          else
            return -1;
        }
      }
    
    }
    
    /* Name of the class has to be "Main" only if the class is public. */
    class Ideone {
    
      public static int[][] cost;
      static PriorityQueue < node > p;
      public static void main(String[] args) throws java.lang.Exception {
    
        p = new PriorityQueue < node > ();
        cost = new int[13][11];
    
        for (int[] row: cost)
          Arrays.fill(row, -1);
        cost[0][8] = 366564;
        cost[2][9] = 368282;
        cost[1][3] = 368282;
        cost[4][9] = 368282;
        cost[0][9] = 376564;
        cost[1][9] = 372423;
        cost[5][9] = 372423;
        cost[0][3] = 436564;
        cost[7][0] = 378282;
        cost[2][10] = 378282;
        cost[4][10] = 378282;
        cost[0][4] = 382423;
        p.add(new node(0, 8, 8));
        p.add(new node(2, 9, 8));
        p.add(new node(1, 3, 7));
        p.add(new node(4, 9, 2));
        p.add(new node(0, 9, 8));
        p.add(new node(1, 9, 8));
        p.add(new node(5, 9, 2));
        p.add(new node(0, 3, 6));
        p.add(new node(7, 0, 3));
        p.add(new node(2, 10, 8));
        p.add(new node(4, 10, 2));
        p.add(new node(0, 4, 7));
    
        while (p.size() != 0) {
          node n1 = p.poll();
          System.out.println(n1.x + " " + n1.y + " " + cost[n1.x][n1.y]);
    
        }
    
      }
    }
    Output is

    0 8 366564
    1 3 368282
    2 9 368282
    4 9 368282
    5 9 372423
    1 9 372423
    0 9 376564
    4 10 378282
    2 10 378282
    7 0 378282
    0 4 382423
    0 3 436564

    but i am expecting

    0 8 366564
    2 9 368282
    1 3 368282
    4 9 368282
    1 9 372423
    5 9 372423
    0 9 376564
    7 0 378282
    2 10 378282
    4 10 378282
    0 4 382423
    0 3 436564
Working...