public void update( int[][] c ){
        Vector v = new Vector();
        int high = 0;
        for( int i=0; i<DIGITS; i++ ){
            for( int j=0; j<DIGITS; j++ ){
                if( c[i][j] > high ){
                    high = c[i][j];
                    v.clear();
                    v.add( new int[]{i,j} );
                }else{
                    if( c[i][j] == high ){
                        v.add(new int[] {i, j});
                    }
                }
            }
        }
        if( v.size() > 0 ){
            int index = (int)(v.size()*g.nextDouble());
            int[] val = (int[])v.get(index);
            int row = val[0];
            int column = val[1];
            int[] new_c = new int[DIGITS];
            int temp;
            for( int j=0; j<DIGITS; j++ ){
                temp = board[row][j];
                board[row][j] = board[row][column];
                board[row][column] = temp;
                int[][] nc = conflicts(board);
                new_c[j] = cost( nc );
                temp = board[row][j];
                board[row][j] = board[row][column];
                board[row][column] = temp;
            }
            int low = 1000;
            v = new Vector();
            for( int j=0; j<DIGITS; j++ ){
                if( new_c[j] < low ){
                    low = new_c[j];
                    v.clear();
                    v.add(new Integer(j));
                }
            }
            index = (int)(v.size()*g.nextDouble());
            int k = ((Integer)v.get(index)).intValue();
            temp = board[row][k];
            board[row][k] = board[row][column];
            board[row][column] = temp;
        }
    }